pdfminer将pdf转为csv
生活随笔
收集整理的這篇文章主要介紹了
pdfminer将pdf转为csv
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
之前隨便做了一下中金所杯的金融知識(shí)大賽的試題,低分飄過。看到復(fù)試名單,突然有一個(gè)想法,這個(gè)是pdf,萬一有人想分析一下每個(gè)區(qū)域的人的分布,那怎么辦。
pdf文件大概是這樣的。
用的python庫是pdfminer,這個(gè)庫說實(shí)話還是有點(diǎn)復(fù)雜的,具體使用的時(shí)候,還是慢慢調(diào)試,print看看能夠出來些什么,明白了規(guī)律之后再處理。本文作為一個(gè)記錄。
#!/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é)號(hào)', u'專業(yè)名稱']) # 打開一個(gè)pdf文件 fp = open("./list.pdf", 'rb') # 創(chuàng)建一個(gè)PDF文檔解析器對(duì)象 parser = PDFParser(fp) # 創(chuàng)建一個(gè)PDF文檔對(duì)象存儲(chǔ)文檔結(jié)構(gòu) # 提供密碼初始化,沒有就不用傳該參數(shù) # document = PDFDocument(parser, password) document = PDFDocument(parser) # 檢查文件是否允許文本提取 if not document.is_extractable:raise PDFTextExtractionNotAllowed # 創(chuàng)建一個(gè)PDF資源管理器對(duì)象來存儲(chǔ)共享資源 # caching = False不緩存 rsrcmgr = PDFResourceManager(caching=False) # 創(chuàng)建一個(gè)PDF設(shè)備對(duì)象 laparams = LAParams() # 創(chuàng)建一個(gè)PDF頁面聚合對(duì)象 device = PDFPageAggregator(rsrcmgr, laparams=laparams) # 創(chuàng)建一個(gè)PDF解析器對(duì)象 interpreter = PDFPageInterpreter(rsrcmgr, device) # 處理文檔當(dāng)中的每個(gè)頁面 # 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)遍歷列表,每次處理一個(gè)page的內(nèi)容 for page in PDFPage.create_pages(document):page_cnt += 1interpreter.process_page(page)# 接受該頁面的LTPage對(duì)象layout = device.get_result()# 這里layout是一個(gè)LTPage對(duì)象 里面存放著 這個(gè)page解析出的各種對(duì)象# 一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等等# if page_cnt == 1:# row_num = 34# else:# row_num = 36page_list = list()for x in layout:# 如果x是水平文本對(duì)象的話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后台播放没有声音