2010-03-20 16 views
20

Ho un po 'di codice da leggere da un file pdf. C'è un modo per leggere riga per riga dal file pdf (non dalle pagine) usando Pypdf, Python 2.6, su Windows?Come leggere riga per riga nel file pdf usando PyPdf?

Ecco il codice per la lettura delle pagine 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 

Aggiornamento:

Il codice di chiamata è questo:

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

risposta

7

assomiglia a quello che hai è un grande frammento di dati di testo che si desidera interpretare riga per riga.

È possibile utilizzare la classe StringIO per avvolgere che il contenuto come file-come oggetto ricercabile:

>>> 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' 

Nel tuo caso, fare:

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ì, ma dove ho potuto, ma questo nel mio codice, perché non posso farlo funzionare ??? –

+0

stesso problema, questo non è lavoro mi dà l'intera pagina, voglio solo linea per linea :) –

+0

questo codice non funzionava .... pdf.getPage (i) .extractText() ottiene dati vuoti –

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

Utilizzando yield e PdfFileReader.pages può semplificare le cose,

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 

Inoltre, alcuni possono google "python ottenere il testo contenuto PDF" ecco come fare: (questo è come sono arrivato qui)

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') 
Problemi correlati