欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

我們將使用兩個(gè)Python庫(kù)來(lái)完成此任務(wù):

PyPDF2:一個(gè)可以讀、寫、合并和分割PDF文件的庫(kù)。

Unstructured.io:一個(gè)可以使用文檔圖像分析模型分割PDF文檔的庫(kù)。

下面是完成這個(gè)任務(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庫(kù)導(dǎo)入必要的類:PdfReader和PdfWriter。PdfReader類用于讀取原始PDF文件,該文件存儲(chǔ)在名為“exam-prep”的子目錄中。

步驟2:分區(qū)PDF

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

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

步驟3:寫PDF塊

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

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

步驟4:分析PDF塊

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

最后總結(jié)

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

方法補(bǔ)充

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

方法一:批量分割PDF文件

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

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("請(qǐng)輸入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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python爬蟲(chóng)之對(duì)CSDN榜單進(jìn)行分析

    Python爬蟲(chóng)之對(duì)CSDN榜單進(jìn)行分析

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

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

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

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

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

    python使用多進(jìn)程的實(shí)例詳解

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

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

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

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

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

    python實(shí)現(xiàn)鍵盤控制鼠標(biāo)移動(dòng)

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

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

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

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

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

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

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

最新評(píng)論