背景:
我有一个多页的PDF文件(LARGE_PDF
)。每页包含一个表,没有其他内容。每个表看起来都不同。我想提取表内容并将其放入pandas数据框。我正在为此使用tabula-py,它可以通过以下方法按需工作:
方法:
首先,我将PDF文件拆分为多个单页PDF文件并将其保存到光盘中。
single_page_files = split_and_save(LARGE_PDF) # Split to single files, one page each
第二,将每个文件馈送到tabula-py。
from tabula import read_pdf as tabular_read
for item in single_page_files:
print type(item)
df = tabular_read(PDF_page, pandas_options={'header':None})
if df:
print 'approach works'
输出:
>>> <type 'str'> # filepath string
>>> approach works
挑战:
我现在要在内存中执行此操作,这样就不会将任何中间的单页pdf文件保存到磁盘上。为此,我创建了一个单页PyPDF2.pdf.PageObject
对象列表,并将其提供给tabula-py。
from PyPDF2 import PdfFileReader, PdfFileWriter
single_page_pypdfobjects = split_but_dont_save(LARGE_PDF)
for item in single_page_pypdfobjects:
print type(item)
df = tabular_read(PDF_page, pandas_options={'header':None})
if df:
print 'approach works'
输出:
>>> class 'PyPDF2.pdf.PageObject'> # PyPDF2 single page object
>>> TypeError: unhashable type
如何使用python处理内存中的PDF?