最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

步驟2:分區(qū)PDF

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

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

步驟3:寫PDF塊

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

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

步驟4:分析PDF塊

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

最后總結(jié)

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

方法補(bǔ)充

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

方法一:批量分割PDF文件

現(xiàn)在,編寫一個(gè)腳本來批量分割PDF文件。假設(shè)有一個(gè)大的PDF文件,需要每5頁切割成一個(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("請輸入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繪制簡易動態(tài)圣誕樹

    如何用Python繪制簡易動態(tài)圣誕樹

    這篇文章主要給大家介紹了關(guān)于如何用Python繪制簡易動態(tài)圣誕樹,文中講解了如何通過編寫代碼來實(shí)現(xiàn)特定的效果,包括代碼的編寫技巧和效果的展示,需要的朋友可以參考下
    2025-01-01
  • Django request.META.get()獲取不到header頭的原因分析

    Django request.META.get()獲取不到header頭的原因分析

    這篇文章主要介紹了Django request.META.get()獲取不到header頭的原因分析,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • python文件操作的簡單方法總結(jié)

    python文件操作的簡單方法總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于python文件操作的簡單方法知識點(diǎn),有需要的朋友們可以學(xué)習(xí)下。
    2019-11-11
  • python實(shí)現(xiàn)列表中最大最小值輸出的示例

    python實(shí)現(xiàn)列表中最大最小值輸出的示例

    今天小編就為大家分享一篇python實(shí)現(xiàn)列表中最大最小值輸出的示例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • pytorch dataloader 取batch_size時(shí)候出現(xiàn)bug的解決方式

    pytorch dataloader 取batch_size時(shí)候出現(xiàn)bug的解決方式

    今天小編就為大家分享一篇pytorch dataloader 取batch_size時(shí)候出現(xiàn)bug的解決方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python語言規(guī)范之Pylint的詳細(xì)用法

    Python語言規(guī)范之Pylint的詳細(xì)用法

    Pylint 是一個(gè) Python 代碼分析工具,它分析 Python 代碼中的錯誤,查找不符合代碼風(fēng)格標(biāo)準(zhǔn)(Pylint 默認(rèn)使用的代碼風(fēng)格是 PEP 8)和有潛在問題的代碼,接下來通過本文給大家介紹Python Pylint的使用,感興趣的朋友一起看看吧
    2021-06-06
  • Pandas使用分隔符或正則表達(dá)式將字符串拆分為多列

    Pandas使用分隔符或正則表達(dá)式將字符串拆分為多列

    本文主要介紹了Pandas使用分隔符或正則表達(dá)式將字符串拆分為多列,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python數(shù)據(jù)分析中常見統(tǒng)計(jì)方法詳解

    Python數(shù)據(jù)分析中常見統(tǒng)計(jì)方法詳解

    數(shù)據(jù)分析是現(xiàn)代社會中不可或缺的一部分,通過對數(shù)據(jù)的統(tǒng)計(jì)和分析,我們可以得出有用的信息和見解,本文將介紹在?Python?中常見的數(shù)據(jù)統(tǒng)計(jì)方法,希望對大家有所幫助
    2024-02-02
  • 利用Python實(shí)現(xiàn)Excel文件智能合并工具

    利用Python實(shí)現(xiàn)Excel文件智能合并工具

    有時(shí)候,我們需要將多個(gè)Excel文件按照特定順序合并成一個(gè)文件,這樣可以更方便地進(jìn)行后續(xù)的數(shù)據(jù)處理和分析,下面我們看看如何使用Python實(shí)現(xiàn)Excel文件智能合并吧
    2025-05-05
  • Python OpenCV使用dlib進(jìn)行多目標(biāo)跟蹤詳解

    Python OpenCV使用dlib進(jìn)行多目標(biāo)跟蹤詳解

    這篇文章主要為大家介紹了如何使用 dlib 庫在實(shí)時(shí)視頻中有效地跟蹤多個(gè)對象,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)OpenCV有一定幫助,需要的可以參考一下
    2022-03-03

最新評論

洛浦县| 木兰县| 沁阳市| 黑河市| 团风县| 沙田区| 烟台市| 万盛区| 新疆| 拉萨市| 龙井市| 开江县| 盘山县| 宁化县| 岳池县| 中江县| 织金县| 中宁县| 南部县| 兴业县| 新蔡县| 孟州市| 永安市| 台安县| 山西省| 库尔勒市| 永年县| 巩留县| 山阳县| 拉萨市| 南昌市| 西乌珠穆沁旗| 博乐市| 澄江县| 林口县| 肥乡县| 清新县| 泉州市| 吉隆县| 阿坝县| 垣曲县|