pdfminer将pdf转为csv
生活随笔
收集整理的這篇文章主要介紹了
pdfminer将pdf转为csv
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
之前隨便做了一下中金所杯的金融知識大賽的試題,低分飄過。看到復(fù)試名單,突然有一個想法,這個是pdf,萬一有人想分析一下每個區(qū)域的人的分布,那怎么辦。
pdf文件大概是這樣的。
用的python庫是pdfminer,這個庫說實話還是有點復(fù)雜的,具體使用的時候,還是慢慢調(diào)試,print看看能夠出來些什么,明白了規(guī)律之后再處理。本文作為一個記錄。
#!/usr/bin/python #-*- coding: utf-8 -*-from pdfminer.converter import PDFPageAggregator from pdfminer.pdfparser import PDFParser from pdfminer.pdfdocument import PDFDocument from pdfminer.pdfpage import PDFPage from pdfminer.pdfpage import PDFTextExtractionNotAllowed from pdfminer.pdfinterp import PDFResourceManager from pdfminer.pdfinterp import PDFPageInterpreter from pdfminer.layout import * import pandas as pd import re import csvcsvfile = file('csv_test.csv', 'wb') writer = csv.writer(csvfile) writer.writerow(['location', 'school', 'name', 'sex', 'stu_number', 'major']) # df = pd.DataFrame(columns=[u'區(qū)域信息', u'學(xué)校名稱', u'考生姓名', u'性別', u'學(xué)號', u'專業(yè)名稱']) # 打開一個pdf文件 fp = open("./list.pdf", 'rb') # 創(chuàng)建一個PDF文檔解析器對象 parser = PDFParser(fp) # 創(chuàng)建一個PDF文檔對象存儲文檔結(jié)構(gòu) # 提供密碼初始化,沒有就不用傳該參數(shù) # document = PDFDocument(parser, password) document = PDFDocument(parser) # 檢查文件是否允許文本提取 if not document.is_extractable:raise PDFTextExtractionNotAllowed # 創(chuàng)建一個PDF資源管理器對象來存儲共享資源 # caching = False不緩存 rsrcmgr = PDFResourceManager(caching=False) # 創(chuàng)建一個PDF設(shè)備對象 laparams = LAParams() # 創(chuàng)建一個PDF頁面聚合對象 device = PDFPageAggregator(rsrcmgr, laparams=laparams) # 創(chuàng)建一個PDF解析器對象 interpreter = PDFPageInterpreter(rsrcmgr, device) # 處理文檔當(dāng)中的每個頁面 # doc.get_pages() 獲取page列表 #for i, page in enumerate(document.get_pages()): #PDFPage.create_pages(document) 獲取page列表的另一種方式 replace = re.compile(r'\s+') page_cnt = 0 # 循環(huán)遍歷列表,每次處理一個page的內(nèi)容 for page in PDFPage.create_pages(document):page_cnt += 1interpreter.process_page(page)# 接受該頁面的LTPage對象layout = device.get_result()# 這里layout是一個LTPage對象 里面存放著 這個page解析出的各種對象# 一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等等# if page_cnt == 1:# row_num = 34# else:# row_num = 36page_list = list()for x in layout:# 如果x是水平文本對象的話if isinstance(x, LTTextBoxHorizontal):text = x.get_text()page_list.append(text.encode('utf-8'))# text=re.sub(replace,'',x.get_text())# if len(text) != 0:# print textpage_list = page_list[7:-1]cut_point = len(page_list) / 6data = [ele for ele in zip(page_list[0:cut_point], page_list[cut_point:cut_point*2], page_list[cut_point*2:cut_point*3],\page_list[cut_point*3:cut_point*4], page_list[cut_point*4:cut_point*5], page_list[cut_point*5:cut_point*6])]writer.writerows(data)csvfile.close()大概就是這樣。
總結(jié)
以上是生活随笔為你收集整理的pdfminer将pdf转为csv的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第四章 第四节 per_cpu
- 下一篇: Mplayer后台播放没有声音