成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

批量截取pdf文件

yzzz / 3713人閱讀

摘要:能獲取頁(yè)面中文本的準(zhǔn)確位置,以及字體或行等其他信息。安裝修改的源碼利用截取中的某幾頁(yè),如果的中文字編碼為編碼,則無(wú)法解析。在簡(jiǎn)體中文操作系統(tǒng)中,編碼代表編碼。其一在文件中第行,改為此處是為了適應(yīng)含有的編碼的中文字符,提供對(duì)其的解碼能力。

任務(wù)

現(xiàn)在我們有大量的pdf文件,我們想要截取每個(gè)文件中感興趣的一部分,比如,我們下載了3500份上市公司的年度報(bào)告,我們想要找到包含“關(guān)鍵審計(jì)事項(xiàng)”部分內(nèi)容,將pdf相關(guān)頁(yè)保存為新的pdf文件。
python環(huán)境:

anaconda3
pdfminer3k
pypdf2
解析pdf文件 PDFMiner

PDFMiner是一個(gè)從PDF文檔中提取信息的工具。與其他PDF相關(guān)的工具不同,它只用于獲取和分析文本數(shù)據(jù)。PDFMiner能獲取頁(yè)面中文本的準(zhǔn)確位置,以及字體或行等其他信息。它還有一個(gè)PDF轉(zhuǎn)換器,可以將PDF文件轉(zhuǎn)換成其他文本格式(如HTML)。還有一個(gè)可擴(kuò)展的解析器PDF,可以用于文本分析以外的其他用途。

安裝pdfminer3k

pip install pdfminder3k

解析pdf,匹配關(guān)鍵字,返回其所在頁(yè)碼

參考

from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal, LAParams
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed

path =  r"./report/603999讀者傳媒2017年年度報(bào)告.pdf"

def  parse(path):
    """
    #解析pdf文件,并將文字內(nèi)容更保存在文本中
    返回“關(guān)鍵字”所在的頁(yè)碼
    """
    fp =  open(path, "rb") # 以二進(jìn)制讀模式打開
    # 用文件對(duì)象來(lái)創(chuàng)建一個(gè)pdf文檔分析器
    praser = PDFParser(fp)
    # 創(chuàng)建一個(gè)PDF文檔
    doc = PDFDocument()
    # 連接分析器 與文檔對(duì)象
    praser.set_document(doc)
    doc.set_parser(praser)
    # 提供初始化密碼
    # 如果沒(méi)有密碼 就創(chuàng)建一個(gè)空的字符串
    doc.initialize()
    # 檢測(cè)文檔是否提供txt轉(zhuǎn)換,不提供就忽略
    if  not doc.is_extractable:
        raise PDFTextExtractionNotAllowed
    else:
        # 創(chuàng)建PDf 資源管理器 來(lái)管理共享資源
        rsrcmgr = PDFResourceManager()
        # 創(chuàng)建一個(gè)PDF設(shè)備對(duì)象
        laparams = LAParams()
        device = PDFPageAggregator(rsrcmgr, laparams=laparams)
        # 創(chuàng)建一個(gè)PDF解釋器對(duì)象
        interpreter = PDFPageInterpreter(rsrcmgr, device)
        # 循環(huán)遍歷列表,每次處理一個(gè)page的內(nèi)容
        page_num=0
        key_flag=False
        for page in doc.get_pages(): # doc.get_pages() 獲取page列表
            if key_flag: #如果找到第一個(gè)關(guān)鍵字,則退出解析
                break
            page_num=page_num+1
            interpreter.process_page(page)
            # 接受該頁(yè)面的LTPage對(duì)象
            layout = device.get_result()
            # 這里layout是一個(gè)LTPage對(duì)象 里面存放著 這個(gè)page解析出的各種對(duì)象 一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等等 想要獲取文本就獲得對(duì)象的text屬性,
            for x in layout:
                if (isinstance(x, LTTextBoxHorizontal)):
                    results = x.get_text()
                    if  "關(guān)鍵審計(jì)事項(xiàng)"  in results: # 匹配到關(guān)鍵字,則退出該頁(yè)的循環(huán)
                        key_flag=True
                        break
        return page_num
裁剪pdf文件 PyPDF2

PyPDF2是一個(gè)python PDF庫(kù),能夠分割、合并、裁剪和轉(zhuǎn)換PDF文件的頁(yè)面。它還可以向PDF文件中添加自定義數(shù)據(jù)、查看選項(xiàng)和密碼。它可以從PDF檢索文本和元數(shù)據(jù),還可以將整個(gè)文件合并在一起。

安裝pypdf2:

pip install pypdf2

修改pypdf2的源碼

利用pypdf2截取pdf中的某幾頁(yè),如果pdf的中文字編碼為ANSI編碼,則無(wú)法解析。對(duì)于pypdf2對(duì)于gbk不支持的現(xiàn)象,需要對(duì)以下兩處進(jìn)行修改。參考

tips:
ANSI是一種字符代碼,為使計(jì)算機(jī)支持更多語(yǔ)言。ANSI編碼表示英文字符時(shí)用一個(gè)字節(jié),表示中文用兩個(gè)或四個(gè)字節(jié)。在簡(jiǎn)體中文Windows操作系統(tǒng)中,ANSI 編碼代表 GBK 編碼。
GBK是在國(guó)家標(biāo)準(zhǔn)GB2312基礎(chǔ)上擴(kuò)容后兼容GB2312的標(biāo)準(zhǔn)。

其一:
在文件*Miniconda3libsite-packagesPyPDF2generic.py"中第488行,改為
此處是為了適應(yīng)含有‘gbk’的編碼的中文字符,提供對(duì)其的解碼能力。

try:
    return NameObject(name.decode("utf-8"))
except (UnicodeEncodeError, UnicodeDecodeError) as e:
    # Name objects should represent irregular     characters
    # with a "#" followed by the symbol"s hex number
    ret=name.decode("gbk")
    return NameObject(ret)

其二:
在文件*Miniconda3libsite-packagesPyPDF2utils.py中,第238-241行,改為:
此處是為了適應(yīng)‘utf-8’的編碼情況;

try:
    r = s.encode("latin-1")
    if len(s) < 2:
        bc[s] = r
    return r
except Exception as e:
    print(s)
    r = s.encode("utf-8")
    if len(s) < 2:
        bc[s] = r
    return r

截取pdf特定頁(yè)

from PyPDF2 import PdfFileWriter, PdfFileReader
def  pdfCrap(path,start_page,save_path):
    """
    從pdf文件中截取幾頁(yè),并保存在對(duì)應(yīng)pdf文件中
    """
    # 開始頁(yè)
    start_page = start_page - 1
    # 截止頁(yè)
    end_page = start_page +  5  # 這里設(shè)定截取5頁(yè)
    output = PdfFileWriter()
    pdf_file = PdfFileReader(open(path, "rb"), strict=False)
    pdf_pages_len = pdf_file.getNumPages()
    for i  in  range(start_page, end_page):
        output.addPage(pdf_file.getPage(i)) # 在輸出流中添加頁(yè)
    outputStream =  open(save_path, "wb")
    output.write(outputStream)
遍歷文件夾內(nèi)所有文件

以上已經(jīng)可以實(shí)現(xiàn)對(duì)單一pdf文件的解析以及提取特定頁(yè)了,剩下的就是將整個(gè)流程串聯(lián)起來(lái),實(shí)現(xiàn)批量pdf文件的截取。

import os
def  file_name(file_dir):
    """
    獲取某文件夾下,特定擴(kuò)展名的文件名,
    返回特定擴(kuò)展名文件列表
    """
    L=[]
    for root, dirs, files in os.walk(file_dir):
        for  file  in files:
            if os.path.splitext(file)[1] ==  ".pdf": #os.path.splitext()函數(shù)將路徑拆分為文件名+擴(kuò)展名
            L.append(file)
    return L
出錯(cuò)怎么辦

現(xiàn)在,我們已經(jīng)能夠進(jìn)行批量pdf文件的裁剪了,但在實(shí)際操作中,會(huì)發(fā)生許多意外,使得程序被中斷,為了避免中斷影響批處理的進(jìn)程,現(xiàn)在添加異常處理功能。

file_path =  "./report/"  # 輸入文件所在的文件夾
result_path =  "./result/"  # 輸出文件所在文件夾
def  getAll():
    """
    批量裁剪pdf文件,添加程序log,記錄文件名,關(guān)鍵字起始頁(yè)碼,并且對(duì)異常情況進(jìn)行記錄;
    """
    files=file_name(file_path)
    for  file  in  files:
        try:
            path = file_path +  file
            page=parse(path)
            save_path=result_path+file
            pdfCrap(path,page,save_path)
            if page==0: #如果識(shí)別出起始頁(yè)碼為0,說(shuō)明關(guān)鍵字未被找到,需要記錄。
                raise  Exception("page_num=0")
            with  open(r"./log.txt", "a", encoding="utf-8") as f:
            f.write(file+" start_page: "+str(page)+"
")
        except  Exception  as  e: # 捕獲錯(cuò)誤
            print("error: ", e)
            with  open(r"./error_log.txt", "a", encoding="utf-8") as f:
            f.write(file+" start_page: "+str(page)+"
")
            continue

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/43179.html

相關(guān)文章

  • 批量抓取網(wǎng)頁(yè)pdf文件

    摘要:任務(wù)批量抓取網(wǎng)頁(yè)文件有一個(gè),里面有數(shù)千條指向下載鏈接的網(wǎng)頁(yè)地址,現(xiàn)在,需要批量抓取這些網(wǎng)頁(yè)地址中的文件。利用,具體邏輯是正常情況下,按次序下載文件,如果同一文件,下載失敗次數(shù)超過(guò),則跳過(guò),下載下一個(gè)文件,并記錄錯(cuò)誤信息。 任務(wù):批量抓取網(wǎng)頁(yè)pdf文件 有一個(gè)excel,里面有數(shù)千條指向pdf下載鏈接的網(wǎng)頁(yè)地址,現(xiàn)在,需要批量抓取這些網(wǎng)頁(yè)地址中的pdf文件。python環(huán)境: anaco...

    pubdreamcc 評(píng)論0 收藏0
  • 批量抓取網(wǎng)頁(yè)pdf文件

    摘要:任務(wù)批量抓取網(wǎng)頁(yè)文件有一個(gè),里面有數(shù)千條指向下載鏈接的網(wǎng)頁(yè)地址,現(xiàn)在,需要批量抓取這些網(wǎng)頁(yè)地址中的文件。利用,具體邏輯是正常情況下,按次序下載文件,如果同一文件,下載失敗次數(shù)超過(guò),則跳過(guò),下載下一個(gè)文件,并記錄錯(cuò)誤信息。 任務(wù):批量抓取網(wǎng)頁(yè)pdf文件 有一個(gè)excel,里面有數(shù)千條指向pdf下載鏈接的網(wǎng)頁(yè)地址,現(xiàn)在,需要批量抓取這些網(wǎng)頁(yè)地址中的pdf文件。python環(huán)境: anaco...

    icyfire 評(píng)論0 收藏0
  • 數(shù)據(jù)分析遇到PDF文本,怎么用Python批量提取內(nèi)容

    摘要:復(fù)雜系統(tǒng)仿真的微博客虛假信息擴(kuò)散模型研究面向影子分析的社交媒體競(jìng)爭(zhēng)情報(bào)搜集面向人機(jī)協(xié)同的移動(dòng)互聯(lián)網(wǎng)政務(wù)門戶探析經(jīng)驗(yàn)證。微博客的企業(yè)競(jìng)爭(zhēng)情報(bào)搜集移動(dòng)社交媒體用戶隱私保護(hù)對(duì)策研究注意這里的提示,原先的個(gè)文件沒(méi)有被再次抽取,只有個(gè)新文件被抽取。 showImg(https://segmentfault.com/img/bVbiU7y?w=1000&h=508); 本文為你展示,如何用Pyth...

    cloud 評(píng)論0 收藏0
  • 有沒(méi)有軟件可以將dwg格式的圖紙批量轉(zhuǎn)成pdf格式?

    摘要:軟件進(jìn)入轉(zhuǎn)換狀態(tài),稍等一下,轉(zhuǎn)就快速轉(zhuǎn)換完成。其實(shí)可以將格式的圖紙批量轉(zhuǎn)成格式的軟件有很多,但是小編教大家了一種最簡(jiǎn)單的,希望可以對(duì)大家有所幫助哦 有沒(méi)有軟件可以將dwg格式的圖紙批量轉(zhuǎn)成pdf格式?當(dāng)然是有的啊,那么我們常用的PC電腦端相關(guān)的轉(zhuǎn)換器軟件的話,在手機(jī)上,我們一樣是可以實(shí)現(xiàn)相關(guān)的操作應(yīng)用的,那么在手機(jī)上又該怎么進(jìn)行具體的實(shí)踐操作?其實(shí)方法也是很簡(jiǎn)單的,和電腦上一樣,只需要...

    Labradors 評(píng)論0 收藏0
  • 如何將一個(gè)PDF文件里的圖片批量導(dǎo)出

    摘要:假設(shè)我有下面這個(gè)文件,里面有很多圖片,我想把這些圖片批量導(dǎo)出,而不是在里一張張手動(dòng)拷貝本文介紹一種快捷做法。 假設(shè)我有下面這個(gè)PDF文件,里面有很多圖片,我想把這些圖片批量導(dǎo)出,而不是在Adobe Acrobat Reader里一張張手動(dòng)拷貝: showImg(https://segmentfault.com/img/remote/1460000017166430); 本文介紹一種快捷...

    thursday 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<