Python 如何从PDF到Excel的坐标中提取文本
对python来说非常陌生。我使用了以下代码:Python 如何从PDF到Excel的坐标中提取文本,python,excel,csv,parsing,pdf,Python,Excel,Csv,Parsing,Pdf,对python来说非常陌生。我使用了以下代码: from pdfminer.layout import LAParams, LTTextBox from pdfminer.pdfpage import PDFPage from pdfminer.pdfinterp import PDFResourceManager from pdfminer.pdfinterp import PDFPageInterpreter from pdfminer.converter import PDFPageAgg
from pdfminer.layout import LAParams, LTTextBox
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
fp = open('Card.pdf', 'rb')
rsrcmgr = PDFResourceManager()
laparams = LAParams()
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
interpreter = PDFPageInterpreter(rsrcmgr, device)
pages = PDFPage.get_pages(fp)
for page in pages:
print('Processing next page...')
interpreter.process_page(page)
layout = device.get_result()
for lobj in layout:
if isinstance(lobj, LTTextBox):
x, y, text = lobj.bbox[0], lobj.bbox[3], lobj.get_text()
print('At %r is text: %s' % ((x, y), text))
输出如下所示:
At(245.76685.4898)是文本:语句
At(99.36538.749799999999)是text:Type
At(210.0538.74979999999)是文本:详细信息
At(310.8538.74979999999)为文本:参考
我想将特定文本放入CSV中的列中,例如(99.36538.74979999999)处的任何文本都可以进入第1列,等等
我该怎么做?您可以使用
pandas
执行此任务:
import pandas as pd
df_results = pd.DataFrame()
for lobj in layout:
x, y, text = lobj.bbox[0], lobj.bbox[3], lobj.get_text()
collected_data = {'x': x, 'y': y, 'text': text}
data = pd.Series(collected_data)
df_results = df_results.append(data, ignore_index=True)
df_results.to_csv('coordinates_data.csv')
它将数据收集到数据框中,然后另存为csv。您可以使用
熊猫
执行此任务:
import pandas as pd
df_results = pd.DataFrame()
for lobj in layout:
x, y, text = lobj.bbox[0], lobj.bbox[3], lobj.get_text()
collected_data = {'x': x, 'y': y, 'text': text}
data = pd.Series(collected_data)
df_results = df_results.append(data, ignore_index=True)
df_results.to_csv('coordinates_data.csv')
它会将数据收集到数据框中,然后另存为csv。您需要在excel中的几列中收集哪些数据?例如,第1列中的(245.76685.4898)数据,第2列中的(99.36538.7497999999999999)等。您需要在单独的列中收集
x,y,text
?是的。有什么建议吗?嗨,Zaraki,我得到了以下错误:x,y,text=lobj.bbox[0],lobj.bbox[3],lobj.get_text()AttributeError:“LTCurve”对象没有属性“get_text”,你需要在excel的各个列中收集哪些数据?比如说第1列(245.76685.4898)中的数据,(99.36538.7497999999)第2列中的数据,等等你需要收集x,y,文本
在单独的列中?完全正确。有什么建议吗?嗨,Zaraki,我得到以下错误:x,y,text=lobj.bbox[0],lobj.bbox[3],lobj.get_text()AttributeError:'LTCurve'对象没有属性'get_text'