Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to read line by line in pdf file using PyPdf?

Tags:

python

pdf

pypdf

I have some code to read from a pdf file. Is there a way to read line by line from the pdf file (not pages) using Pypdf, Python 2.6, on Windows?

Here is the code for reading the pdf pages:

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 

Update:

The call code is this:

f= open('test.txt','w') pdfl = getPDFContent("test.pdf").encode("ascii", "ignore") f.write(pdfl) f.close() 
like image 461
Rami Jarrar Avatar asked Mar 20 '10 04:03

Rami Jarrar


1 Answers

Looks like what you have is a large chunk of text data that you want to interpret line-by-line.

You can use the StringIO class to wrap that content as a seekable file-like object:

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

In your case, do:

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()) 
like image 118
MikeyB Avatar answered Oct 01 '22 08:10

MikeyB