Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

parse a pdf using python

Tags:

python

pdf

I have a pdf file. It contains of four columns and all the pages don't have grid lines. They are the marks of students.

I would like to run some analysis on this distribution.(histograms, line graphs etc).

I want to parse this pdf file into a Spreadsheet or an HTML file (which i can then parse very easily).

The link to the pdf is:

Pdf

this is a public document and is available on this domain openly to anyone.

note: I know that this can be done by exporting the file to text from adobe reader and then import it into Libre Calc or Excel. But i want to do this using a python script.

Kindly help me with this issue. specs: Windows 7 Python 2.7

like image 509
IcyFlame Avatar asked Sep 12 '13 04:09

IcyFlame


People also ask

Can you parse PDF with Python?

It has an extensible PDF parser that can be used for other purposes than text analysis. PyPDF2 is a pure-python PDF library capable of splitting, merging together, cropping, and transforming the pages of PDF files. It can also add custom data, viewing options, and passwords to PDF files.

How do I extract data from a PDF in Python?

All we need to do is use PyPDF2 to access the XML document from the object structure of this file. Once we have access to the XML, it is a simple exercise of parsing out the XML document to access values for various form elements, which could then be stored into a Python list, Numpy array, Pandas dataframe etc.

Is it possible to parse a PDF file?

A PDF Parser (also sometimes called PDF scraper) is a software that can be used to extract data from PDF documents. PDF Parsers can come in form of libraries for developers or as standalone software products for end-users. PDF Parsers are used mainly to extract data from a batch of PDF files.


1 Answers

Use PyPDF2:

from PyPDF2 import PdfFileReader

with open('CT1-All.pdf', 'rb') as f:
    reader = PdfFileReader(f)
    contents = reader.getPage(0).extractText().split('\n')
    pass

When you print contents, it will look like this (I have trimmed it here):

[u'Serial NoRoll NoNameCT1 Marks (50)111MA20026KARADI KALYANI212AR10029MUKESH K
MAR5', u'312MI31004DEEPAK KUMAR7', u'413AE10008FADKE PRASAD DIPAK27', u'513AE10
22RAHUL DUHAN37', u'613AE30005HIMANSHU PRABHAT26.5', u'713AE30019VISHAL KUMAR39
, u'813AG10014HEMANT17', u'913AG10028SHRESTH KR KRISHNA37.51013AG30009HITESH ME
RA33.5', u'1113AG30023RACHIT MADHUKAR40.5', u'1213AR10002ACHARY SUDHEER11', u'1
13AR10004AMAN ASHISH20.5', u'1413AR10008ANKUR44', u'1513AR10010CHUKKA SHALEM RA
U11.5', u'1613AR10012DIKKALA VIJAYA RAGHAVA20.5', u'1713AR10014HRISHABH AMRODIA
1', u'1813AR10016JAPNEET SINGH CHAHAL19.5', u'1913AR10018K VIGNESH42.5', u'2013
R10020KAARTIKEY DWIVEDI49.5', u'2113AR10024LAKSHMISRI KEERTI MANNEY49', u'2213A
10026MAJJI DINESH9.5', u'2313AR10028MOUNIKA BHUKYA17.5', u'2413AR10030PARAS PRA
like image 156
Burhan Khalid Avatar answered Sep 21 '22 11:09

Burhan Khalid