重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
python读写excel 常用的俩个库:xlrd、xlwt
成都创新互联专注于企业成都全网营销推广、网站重做改版、松阳网站定制设计、自适应品牌网站建设、HTML5建站、商城开发、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为松阳等各大城市提供网站开发制作服务。
python 处理pdf 文件库:PyPDF2 (当然也有其他的库,用最简单的)
你的需求很简单,随便在网上找找这几个库的文档很容易处理你的逻辑
1、首先要下载一个处理pdf的组件pdfminer,百度搜索去官网下载
2、下载完成解压以后,打开cmd进入用命令安装。python setup.py install 进行安装
3、我们来测试一下是否安装成功了,引入这个模块,运行一下代码,没有报错就说明安装成功了
4、官网有文档也有代码示例
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfpage import PDFTextExtractionNotAllowed
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.pdfdevice import PDFDevice
fp = open('mypdf.pdf', 'rb')
#创建一个PDF文档解析器对象
parser = PDFParser(fp)
#创建一个PDF文档对象存储文档结构
#提供密码初始化,没有就不用传该参数
document = PDFDocument(parser, password)
#检查文件是否允许文本提取
if not document.is_extractable:
raise PDFTextExtractionNotAllowed
#创建一个PDF资源管理器对象来存储共享资源
rsrcmgr = PDFResourceManager()
#创建一个pdf设备对象
device = PDFDevice(rsrcmgr)
#创建一个PDF解析器对象
interpreter = PDFPageInterpreter(rsrcmgr, device)
#处理文档当中的每个页面
for page in PDFPage.create_pages(document):
interpreter.process_page(page)
5、我新建一个pdf,新输入一些内容
6、运行一下代码即可
你的问题事实上包含几部分:将PDF转化为纯文本格式抽取其中部分内容格式化写入到excel中转换PDF有很多库可以完成,如下是通过pdfminer的示例:fromcStringIOimportStringIOfrompdfminer.pdfinterpimportPDFResourceManager,PDFPageInterpreterfrompdfminer.converterimportTextConverterfrompdfminer.layoutimportLAParamsfrompdfminer.pdfpageimportPDFPagedefconvert_pdf_2_text(path):rsrcmgr=PDFResourceManager()retstr=StringIO()device=TextConverter(rsrcmgr,retstr,codec='utf-8',laparams=LAParams())interpreter=PDFPageInterpreter(rsrcmgr,device)withopen(path,'rb')asfp:forpageinPDFPage.get_pages(fp,set()):interpreter.process_page(page)text=retstr.getvalue()device.close()retstr.close()returntext需要指出的是,pdfminer不但可以将PDF转换为text文本,还可以转换为HTML等带有标签的文本。上面只是最简单的示例,如果每页有很独特的标志,你还可以按页单独处理。
def openFile1(self):
pathFileName, _ = QtWidgets.QFileDialog.getOpenFileName(None, 'Wybierz plik', '', 'pdf(*.pdf)')
print("PathFileName-'{}', \n_-'{}'".format(pathFileName, _))
if pathFileName:
print("Wybrany plik: ", pathFileName)
g = open(pathFileName, 'rb')
return g
def openFile2(self):
pathFileName, _ = QtWidgets.QFileDialog.getOpenFileName(None, 'Wybierz plik', '', 'pdf(*.pdf)')
print("PathFileName-'{}', \n_-'{}'".format(pathFileName, _))
if pathFileName:
print("Wybrany plik: ", pathFileName)
h = open(pathFileName, 'rb')
return h
def laczeniePdf(self,g, h):
readerLinkPage1 = PyPDF2.PdfFileReader(open(g, 'rb'))
readerLinkPage2 = PyPDF2.PdfFileReader(open(h, 'rb'))
writerLinkPage = PyPDF2.PdfFileWriter()
OutputFile = open('FinalOutput.pdf', 'wb')
writerLinkPage.appendPagesFromReader(readerLinkPage1)
writerLinkPage.appendPagesFromReader(readerLinkPage2)
writerLinkPage.write(OutputFile)
OutputFile.close()
大家好,我是Peter~
在很多情况下,我们都需要处理PDF格式的文件。尤其当我们遇到PDF表格数据需要进行提取,真的是一个令人头疼的问题。
因为PDF文件不能像Word那样直接复制,即使复制了再黏贴也可能会出现格式排版错乱甚至乱码问题。如何从一个PDF文件提取出表格数据?本文提供两个解决方案:
首先提供的一种方法是从文字 PDF 中提取表格信息的工具:Camelot,它能够直接将大部分表格转换为 Pandas 的 Dataframe。
更多的详细信息,请参考项目地址:
camelot的安装有多种方式。如果有报错,网上一般有解决方式:
1、通过conda安装
2、使用pip进行安装
3、通过GitHub进行安装
首先将项目复制到本地:
然后进入文件中进行安装:
下面通过一个案例来讲解如何使用camelot。假设我们现在有一个只有一页的PDF文件test.pdf:
1、先读取文件
导出成csv格式的数据(方式1)
查看tables的相关信息:
导出方式2:
将数据转换成DataFrame:
tabula的功能比camelot更加强大,可以同时对多个表格数据进行提取。项目的具体地址请参考:
tabula的安装是非常简单的:
安装之后检验这个库是否安装成功:
通过tabula这个库来读取PDF文件:
然后我们发现列表中唯一的一个元素就是dataframe:
将读取到的数据输出成CSV格式的文件:
上面读取的PDF文件是比较简单的,只有一页,而且刚好是一个很标准的表格形式的数据,下面看一个比较复杂的例子:
下面是第一页,第一列可以看成是索引:
在第二页中有两份表格,而且中间有很多的空白行:
第三页的数据比较标准:
这3页是在同一个PDF文件中,这3页是在同一个PDF文件中,这3页是在同一个PDF文件中
上面的红色提示中我们看到:当没有指定pages参数的时候,只会默认读取第一页的数据,所以列表的长度为1。
转成dataframe后将原来的索引变成新的一列 (部分数据)
通过pages来读取全部数据:
通过指定pages="all":
同时获取两个表格的数据:
通过area参数来指定:
删除在读取的表格中我们不需要的字段信息
可以将得到的数据输出成不同格式的文件,以json格式为例:
我们可以看到
是的,1.导入PyPDF2模块之后使用open()方法打开pdf文件并且调用Reader方法直接将这个pdf文件之中的所有页面都给读取出来,读取出来之后返回的是一个可迭代对象。然后使用getPage()方法获取其中的某一个页面,代码如下所示:
import PyPDF2
reader = PyPDF2.PdfFileReader(open('a.pdf','rb'))
page = reader.getPage(0)
2.以上代码之中的page所返回的就是pdf文件第一页,使用它去调用rotateClockwise()方法就能够将其90度旋转,示例如下:
page.rotateClockwise(180)
这个方法一次只能够对一个页面进行修改操作,并且参数必须为90度及其倍数。也就是只能选择90、180、270、360这四个度数,而且选择是顺时针选择的,旋转之后的页面会自动调整格式。
3.页面旋转完毕之后还需要实例化出来一个文件写入对象,然后使用这个对象将修改旋转后的页面添加到原pdf文件之中。再打开一个新的pdf文件用来保存,然后使用write()方法将页面写入之后将其关闭掉就好了,代码示例如下:
output = PyPDF2.PdfFileWriter()
outputStream = open ("b.pdf","wb")
output.write(outputStream)
outputStream.close()