python - read - ¿Cómo leer línea por línea en archivo pdf usando PyPdf?
python pdf library (3)
Tengo un código para leer de un archivo pdf. ¿Hay alguna manera de leer línea por línea desde el archivo pdf (no páginas) usando Pypdf, Python 2.6, en Windows?
Aquí está el código para leer las páginas en pdf:
import pyPdf
def getPDFContent(path):
content = ""
num_pages = 10
p = file(path, "rb")
pdf = pyPdf.PdfFileReader(p)
for i in range(0, num_pages):
content += pdf.getPage(i).extractText() + "/n"
content = " ".join(content.replace(u"/xa0", " ").strip().split())
return content
Actualizar:
El código de la llamada es este:
f= open(''test.txt'',''w'')
pdfl = getPDFContent("test.pdf").encode("ascii", "ignore")
f.write(pdfl)
f.close()
Parece que lo que tienes es una gran cantidad de datos de texto que deseas interpretar línea por línea.
Puede usar la clase StringIO para envolver ese contenido como un objeto similar al archivo que puede buscar:
>>> import StringIO
>>> content = ''big/nugly/ncontents/nof/nmultiple/npdf files''
>>> buf = StringIO.StringIO(content)
>>> buf.readline()
''big/n''
>>> buf.readline()
''ugly/n''
>>> buf.readline()
''contents/n''
>>> buf.readline()
''of/n''
>>> buf.readline()
''multiple/n''
>>> buf.readline()
''pdf files''
>>> buf.seek(0)
>>> buf.readline()
''big/n''
En tu caso, hazlo:
from StringIO import StringIO
# Read each line of the PDF
pdfContent = StringIO(getPDFContent("test.pdf").encode("ascii", "ignore"))
for line in pdfContent:
doSomething(line.strip())
Usar yield
y PdfFileReader.pages
pueden simplificar las cosas,
from pyPdf import PdfFileReader
def get_pdf_content_lines(pdf_file_path):
with open(pdf_file_path) as f:
pdf_reader = PdfFileReader(f)
for page in pdf_reader.pages:
for line in page.extractText().splitlines():
yield line
for line in get_pdf_content_lines(''/path/to/file.pdf''):
print line
Además, algunos pueden buscar en google "python get pdf content text" así que aquí les mostramos cómo: (así es como llegué aquí)
from pyPdf import PdfFileReader
def get_pdf_content(pdf_file_path):
with open(pdf_file_path) as f:
pdf_reader = PdfFileReader(f)
content = "/n".join(page.extractText().strip() for page in pdf_reader.pages)
content = '' ''.join(content.split())
return content
print get_pdf_content(''/path/to/file.pdf'')
import pyPdf
def getPDFContent(path):
content = ""
num_pages = 10
p = file(path, "rb")
pdf = pyPdf.PdfFileReader(p)
for i in range(0, num_pages):
content += pdf.getPage(i).extractText() + "/n"
content = " ".join(content.replace(u"/xa0", " ").strip().split())
return content