2010-03-20 27 views
20

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?¿Cómo leer línea por línea en archivo pdf usando PyPdf?

Este es el código para la lectura de las páginas 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 

Actualización:

El código de llamada es la siguiente:

f= open('test.txt','w') 
pdfl = getPDFContent("test.pdf").encode("ascii", "ignore") 
f.write(pdfl) 
f.close() 

Respuesta

7

se parece a lo que tienes es un gran fragmento de datos de texto que desea interpretar línea por línea.

Puede utilizar la clase StringIO para el contenido como un archivo-como objeto reubicable:

>>> 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 su caso, hacer:

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()) 
+0

sí, pero en el que podía, pero esto en mi código, porque no puedo hacer que funcione? –

+0

mismo problema, esto no es trabajo, dame toda la página, solo quiero línea por línea :) –

+0

este código no funcionaba ... pdf.getPage (i) .extractText() obtiene datos vacíos –

5
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 
0

Usando yield y PdfFileReader.pages puede 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 google "pitón obtener el texto contenido en pdf" así que aquí es como: (esto es cómo 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') 
Cuestiones relacionadas