如何在Python2.7中逐行从pdf中提取文本
我正在尝试读取和解析包含表的PDF文件 这是PDF中的表格: 这是我的代码:如何在Python2.7中逐行从pdf中提取文本,python,Python,我正在尝试读取和解析包含表的PDF文件 这是PDF中的表格: 这是我的代码: import PyPDF2 import re from PyPDF2 import PdfFileReader , PdfFileWriter FileRead = open("C:\\Users\\Zahraa Jawad\\S40rooms.pdf", 'rb') pdfReader = PyPDF2.PdfFileReader(FileRead) pdfwriter = PdfFileWriter() for
import PyPDF2
import re
from PyPDF2 import PdfFileReader , PdfFileWriter
FileRead = open("C:\\Users\\Zahraa Jawad\\S40rooms.pdf", 'rb')
pdfReader = PyPDF2.PdfFileReader(FileRead)
pdfwriter = PdfFileWriter()
for page in pdfReader.pages:
print page.extractText()
我想要的是分别阅读表中的每一行(拆分),并将所有信息(年、学期、房间、日、课程号、讲师、时间从、时间到、学生人数)保存在一个数组中。在每个'\n'之后,我希望将数据保存在数组中的新索引中
但是,我的代码不起作用;它读取所有信息并将其作为段落返回!我不知道如何分割每一行
例如(见上面的PDF):
341458 01加兹瓦-斯里贝赫乌斯09:00 09:50 30
输出:年、学期、房间、日、课程号、讲师、时间从、时间到、学生人数
2015/2016,第二,S40-021,U,341,Ghazwa Sleebekh,09:00,09:50,30 2015/2016,第二,S40-021,T,341,Ghazwa Sleebekh,09:00,09:50,30 2015/2016,第二,S40-021,H,341,Ghazwa Sleebekh,09:00,09:50,30
它由UTH(Day)分割,但我的问题是如何读取PDF中的每一行并使用正则表达式在其中进行搜索:)在将PDF转换为文本时,我使用实用程序中的
pdftotext
获得了最佳结果。(您可以在多个位置找到ms windows二进制文件,)
请注意,文本提取仅在PDF文件实际包含文本时有效!一些PDF文件只包含文本的扫描图像,在这种情况下,您需要OCR解决方案。在将PDF转换为文本时,我使用实用程序中的
pdftotext
获得了最佳效果。(您可以在多个位置找到ms windows二进制文件,)
请注意,文本提取仅在PDF文件实际包含文本时有效!一些PDF文件只包含文本的扫描图像,在这种情况下,您需要OCR解决方案。您能给我们一个输出示例吗?如果是长文本,只需查看
page.extractText()
的相关部分。您可能会感兴趣。此外,您可以使用str.split
分割字符串,或使用re
模块进行模式匹配,或使用csv
进行表格数据或更复杂的结构化数据。好的,我将发布一个示例。您能给我们一个输出示例吗?如果是长文本,只需查看page.extractText()
的相关部分。您可能会感兴趣。此外,您可以使用str.split
分割字符串,或使用re
模块进行模式匹配,或使用csv
进行表格数据或更复杂的结构化数据。好的,我将发布一个示例
import subprocess
def pdftotext(pdf, page=None):
"""Retrieve all text from a PDF file.
Arguments:
pdf Path of the file to read.
page: Number of the page to read. If None, read all the pages.
Returns:
A list of lines of text.
"""
if page is None:
args = ['pdftotext', '-layout', '-q', pdf, '-']
else:
args = ['pdftotext', '-f', str(page), '-l', str(page), '-layout',
'-q', pdf, '-']
try:
txt = subprocess.check_output(args, universal_newlines=True)
lines = txt.splitlines()
except subprocess.CalledProcessError:
lines = []
return lines