亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用Python分割并高效處理PDF大文件詳解

 更新時間:2025年03月10日 09:45:38   作者:夢想畫家  
在處理大型PDF文件時,將它們分解成更小、更易于管理的塊通常是有益的,本文將為大家介紹一下如何使用Python和為Unstructured.io庫實現(xiàn)分割PDF吧

在處理大型PDF文件時,將它們分解成更小、更易于管理的塊通常是有益的。這個過程稱為分區(qū),它可以提高處理效率,并使分析或操作文檔變得更容易。在本文中,我們將討論如何使用Python和為Unstructured.io庫將PDF文件劃分為更小的部分。

我們將使用兩個Python庫來完成此任務(wù):

PyPDF2:一個可以讀、寫、合并和分割PDF文件的庫。

Unstructured.io:一個可以使用文檔圖像分析模型分割PDF文檔的庫。

下面是完成這個任務(wù)的Python代碼:

from PyPDF2 import PdfReader, PdfWriter
from unstructured.partition.pdf import partition_pdf

import os
from os import path

# Create the output directory if it doesn't exist
# os.makedirs('./output', exist_ok=True)
path = path.abspath(path.dirname(__file__))

# pdf_file = path + '/sample01.pdf'

filename =  path + "/sample02.pdf"

# Read the original PDF
input_pdf = PdfReader(f'{filename}')

batch_size = 2
num_batches = len(input_pdf.pages) // batch_size + 1

filename = path + "/output" 
# Extract batches of 100 pages from the PDF
for b in range(num_batches):
    writer = PdfWriter()

    # Get the start and end page numbers for this batch
    start_page = b * batch_size
    end_page = min((b+1) * batch_size, len(input_pdf.pages))

    # Add pages in this batch to the writer
    for i in range(start_page, end_page):
        writer.add_page(input_pdf.pages[i])

    # Save the batch to a separate PDF file
    batch_filename = f'{filename}-batch{b+1}.pdf'
    with open(batch_filename, 'wb') as output_file:
        writer.write(output_file)

    # Now you can use the `partition_pdf` function from Unstructured.io to analyze the batch
    elements = partition_pdf(filename=batch_filename)
    print(elements)
    # Do something with `elements`...
    
    # This will process without issue
    # 抽取表格數(shù)據(jù)
	elements = partition_pdf("copy-protected.pdf", strategy="hi_res")

第一步:讀PDF文件

首先,我們從PyPDF2庫導(dǎo)入必要的類:PdfReader和PdfWriter。PdfReader類用于讀取原始PDF文件,該文件存儲在名為“exam-prep”的子目錄中。

步驟2:分區(qū)PDF

我們決定批大小,即PDF的每個塊將包含的頁數(shù)。在本例中,我們選擇了100頁的批處理大小,但這可以根據(jù)您的需要進行調(diào)整。

然后通過將PDF中的總頁數(shù)除以批大小來計算批數(shù)量。添加1以確保在頁面總數(shù)不是批大小的倍數(shù)時捕獲所有剩余頁面。

步驟3:寫PDF塊

接下來,循環(huán)遍歷每個批處理,為每個批處理創(chuàng)建一個新的PdfWriter對象。對于每個批處理,我們計算起始頁碼和結(jié)束頁碼,并使用add_page方法將該范圍內(nèi)的每個頁碼添加到PdfWriter。

一旦添加了批處理的所有頁面,我們將它們寫入‘output’子目錄下的新PDF文件中。每個塊的文件名包括原始文件名和批號。

步驟4:分析PDF塊

將PDF分成更小的塊后,現(xiàn)在可以使用來自非結(jié)構(gòu)化的partition_pdf函數(shù)。IO庫來分析每個批處理。該函數(shù)使用文檔圖像分析模型對PDF文檔進行分段,并返回已解析PDF文檔頁面中出現(xiàn)的元素列表。

最后總結(jié)

將大型PDF文件劃分為更小的塊可以使它們更容易、容錯和消耗更少的內(nèi)存。

方法補充

下面小編為大家整理了其他Python分割PDF的相關(guān)方法,感興趣的可以了解下

方法一:批量分割PDF文件

現(xiàn)在,編寫一個腳本來批量分割PDF文件。假設(shè)有一個大的PDF文件,需要每5頁切割成一個小文件。

import PyPDF2

def split_pdf(input_pdf, output_prefix, pages_per_file=5):
    with open(input_pdf, 'rb') as file:
        pdf_reader = PyPDF2.PdfFileReader(file)
        num_pages = pdf_reader.numPages

        for i in range(0, num_pages, pages_per_file):
            pdf_writer = PyPDF2.PdfFileWriter()
            output_pdf = f'{output_prefix}_{i // pages_per_file + 1}.pdf'

            for j in range(i, min(i + pages_per_file, num_pages)):
                page = pdf_reader.getPage(j)
                pdf_writer.addPage(page)

            with open(output_pdf, 'wb') as new_file:
                pdf_writer.write(new_file)

            print(f'已創(chuàng)建文件: {output_pdf}')

# 示例調(diào)用
split_pdf('large_file.pdf', 'output_split')

方法二:批量分割PDF

def main():
    directory = input("請輸入PDF文件所在目錄:")
    pdf_files = get_pdf_files(directory)
    split_rule = get_split_rule()
    output_directory = get_output_directory()

    for file in pdf_files:
        output_files = split_pdf(file, split_rule)
        save_output_files(output_files, output_directory)

    print("分割完成!")

if __name__ == "__main__":
    main()

到此這篇關(guān)于使用Python分割并高效處理PDF大文件詳解的文章就介紹到這了,更多相關(guān)Python PDF處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python爬蟲之對CSDN榜單進行分析

    Python爬蟲之對CSDN榜單進行分析

    這篇文章主要介紹了Python爬蟲之對CSDN榜單進行分析,文章有詳細(xì)代碼,簡單易懂,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2023-01-01
  • python批量修改圖片大小的方法

    python批量修改圖片大小的方法

    這篇文章主要為大家詳細(xì)介紹了python批量修改圖片大小的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • python中的迭代器,生成器與裝飾器詳解

    python中的迭代器,生成器與裝飾器詳解

    大家好,本篇文章主要講的是python中的迭代器,生成器與裝飾器詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • python使用多進程的實例詳解

    python使用多進程的實例詳解

    本文通過實例代碼給大家介紹了python使用多進程的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-09-09
  • 簡單了解Django ContentType內(nèi)置組件

    簡單了解Django ContentType內(nèi)置組件

    這篇文章主要介紹了簡單了解Django ContentType內(nèi)置組件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Python實現(xiàn)將SQLite中的數(shù)據(jù)直接輸出為CVS的方法示例

    Python實現(xiàn)將SQLite中的數(shù)據(jù)直接輸出為CVS的方法示例

    這篇文章主要介紹了Python實現(xiàn)將SQLite中的數(shù)據(jù)直接輸出為CVS的方法,涉及Python連接、讀取SQLite數(shù)據(jù)庫及轉(zhuǎn)換CVS格式數(shù)據(jù)的相關(guān)操作技巧,需要的朋友可以參考下
    2017-07-07
  • python實現(xiàn)鍵盤控制鼠標(biāo)移動

    python實現(xiàn)鍵盤控制鼠標(biāo)移動

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)鍵盤控制鼠標(biāo)移動,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • 深入理解Python中的內(nèi)置函數(shù)map

    深入理解Python中的內(nèi)置函數(shù)map

    在Python中,map是一個非常實用的內(nèi)置函數(shù),它允許你對一個序列的所有元素執(zhí)行特定的操作,map函數(shù)的結(jié)果可以被轉(zhuǎn)換為一個列表,或者其他的可迭代對象,在本文中,我們將深入探討map函數(shù)的用法及其在實際編程中的應(yīng)用
    2023-06-06
  • 使用Pycharm為項目創(chuàng)建一個虛擬環(huán)境完整圖文教程

    使用Pycharm為項目創(chuàng)建一個虛擬環(huán)境完整圖文教程

    這篇文章主要給大家介紹了關(guān)于使用Pycharm為項目創(chuàng)建一個虛擬環(huán)境的相關(guān)資料,我們在使用pycharm做項目時,最好給每一個工程都創(chuàng)建一個虛擬環(huán)境,將對應(yīng)的安裝包放在該虛擬環(huán)境中,避免項目與項目之間產(chǎn)生關(guān)系或沖突,便于管理,需要的朋友可以參考下
    2023-09-09
  • pytorch中常用的乘法運算及相關(guān)的運算符(@和*)

    pytorch中常用的乘法運算及相關(guān)的運算符(@和*)

    pytorch是深度學(xué)習(xí)框架,而深度學(xué)習(xí)其實本質(zhì)就是一大堆矩陣乘法,最后用來模擬一個高維擬合函數(shù),下面這篇文章主要給大家介紹了關(guān)于pytorch中常用的乘法運算及相關(guān)的運算符(@和*)的相關(guān)資料,需要的朋友可以參考下
    2022-01-01

最新評論