批量检验PDF之在双层PDF中是否包含特定内容

批量检验PDF之在双层PDF中是否包含特定内容

问题提出:

批量处理双层pdf,验证所给内容是否在文件中存在。

两种处理方法:

A方法

1.先提取PDF第一页内容出来用一个txt或者excel文件包含,第一列是文件名,第二列是文件第一页的文字内容

2.使用特定内容再该excel中进行手动搜索查询

B方法

使用特定内容在相应的文件中查找(第一页查找或者遍历所有页码查找)返回查找结果。

个人觉得b方法处理起来更方便便捷,a方法对于批量大文件pdf提取内容可能过大还得自己手动人工搜索可能费时费力,b方法对于给定内容出现多次可以有效检验,就是确保该数据在pdf出现过,如果是单一出现的情况可能,未查询到的还得人工检验,因为双层pdf可能识别不准确,可能出现了但是识别不准确导致未查询到,这个也只能做一个辅助工具检验。也许对于很多东西人工检验更为准确。

提出需求:

1.批量处理该代码文件所在目录下的PDF文件

2.使用excel或者txt中的数据在双层pdf中查找,两列数据,A列是对应文件名,B列是需要在PDF中查找的内容。

3.在对应pdf双层文件中查找并且进行结果反馈:生成一个txt或者excel,第一列是文件名,第二列是结果,结果分两种,成功返回找到内容的页码代表在pdf中找到,F代表未在PDF中的所有页码找到。

废话不多说,重新阐述需求:

就是根据一个数据excel和很多pdf进行操作之后生成另外一个结果excel

具体操作过程:

1.访问给定的数据excel文件,从中获取文件名和寻找内容。

2.然后根据获取内容在给定的文件中查询改内容。

3.未找到该文件就返回文件不存在,匹配成功返回内容所在页码,未匹配成功就返回匹配失败。

4.最后将返回结果存入结果excel文件。

实现:(实现B方法)

import os
import pandas as pd
import fitz  # PyMuPDF

# 读取Excel文件
df = pd.read_excel('data.xlsx')

# 存储结果的DataFrame
results_df = pd.DataFrame(columns=['File Name', 'Result'])

# 遍历DataFrame中的每一行
for index, row in df.iterrows():
    file_name = row.iloc[0]  # 假设'A'列是第一列
    search_content = row.iloc[1] 
    pdf_path = f"./{file_name}.pdf"  # 假设PDF文件名与A列相同

    # 检查PDF文件是否存在
    if not os.path.exists(pdf_path):
        new_row = pd.DataFrame({'File Name': [file_name], 'Result': ['File not found']})
        results_df = pd.concat([results_df, new_row], ignore_index=True)
        continue

    # 打开PDF文件
    doc = fitz.open(pdf_path)
    found = False
    all_pages = len(doc)
    found_pages = []

    # 遍历PDF的每一页
    for page_num in range(all_pages):
        page = doc.load_page(page_num)
        text = page.get_text()
        if search_content in text:
            found = True
            found_pages.append(page_num + 1)

    # 根据是否找到内容,记录结果
    if found:
        result = ', '.join(map(str, found_pages))
    else:
        result = 'F'

    new_row = pd.DataFrame({'File Name': [file_name], 'Result': [result]})
    results_df = pd.concat([results_df, new_row], ignore_index=True)

    # 关闭PDF文件
    doc.close()

# 将结果保存到新的Excel文件
results_df.to_excel('results.xlsx', index=False)
print("查询完成")

使用库说明连接

原文:各种处理pdf的库,原文包含各种库的特点说明,在处理时可以选择自己需要的库实现预期功能。

代码优化

# 读取Excel文件
try:
    df = pd.read_excel('data.xlsx')
except Exception as e:
    print(f"读取Excel文件时发生错误:{e}")
    exit()

# 检查列名是否存在
file_name_column = '文件名'  # 假设Excel中文件名列名为“文件名”
search_content_column = '搜索内容'  # 假设Excel中搜索内容列为“搜索内容”

if file_name_column not in df.columns or search_content_column not in df.columns:
    print(f"错误:Excel文件中未找到所需的列名。请确保包含'{file_name_column}'和'{search_content_column}'列。")
    exit()

# 存储结果的DataFrame
results_df = pd.DataFrame(columns=['File Name', 'Result'])

# 遍历DataFrame中的每一行
for index, row in df.iterrows():
    file_name = row[file_name_column]  # 根据列名获取文件名
    search_content = row[search_content_column]  # 根据列名获取搜索内容
    pdf_path = f"./{file_name}.pdf"  # 假设PDF文件名与文件名列相同

1.对于无data.xlsx的情况进行了报错提示。

2.以及列名处理部分不是单纯的是第一列和第二列,可以更具自己输入列名进行查找操作,以及未找到所给列名时进行报错提示。

安装环境以及对应的库版本要求

安装时候注意版本兼容问题

  1. Python
    • 版本:Python 3.6 或更高版本。Python 3.6+ 是因为 pd.read_excel 函数在 pandas 0.24.0+ 版本中引入了对 xlsx 文件的更好支持。
  2. Pandas
    • 版本:Pandas 0.24.0 或更高版本。这是用于数据处理和CSV文件读写的库。
  3. PyMuPDF(fitz):
    • 版本:PyMuPDF 1.18.0 或更高版本。这是一个用于处理PDF文件的库,可以读取、写入和修改PDF文件。
  4. openpyxl
    • 版本:openpyxl 3.0 或更高版本。这是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm 文件的Python库,pandas在读取Excel文件时会用到它。

部分报错情况的解决办法:

本地安装报错的相关文章:Python包的本地安装(.whl)报错:.whl is not a supported wheel on this platform

本地安装需要的库(无网络)

离线安装需要的库(基于python3.11)

Package         Version

--------------- -----------

et_xmlfile      2.0.0
numpy           2.1.3
openpyxl        3.1.5
pandas          2.2.3
PyMuPDF         1.24.14
python-dateutil 2.9.0.post0
pytz            2024.2
six             1.16.0
tzdata          2024.2
xlrd            2.0.1

线上安装报错:

Traceback (most recent call last):
  File "D:\桌面文件所在处\PDF特定内容查找\a.py", line 3, in <module>
    import fitz  # PyMuPDF
    ^^^^^^^^^^^
ModuleNotFoundError: No module named 'fitz'

如果出现该错误信息表明你的Python环境中没有安装名为fitz的模块,你可以通过以下步骤来安装PyMuPDF来解决:

  1. 打开你的命令行界面(例如CMD、PowerShell或终端)。

  2. 输入以下命令来安装PyMuPDF:

    pip install PyMuPDF
    

    或者,如果你使用的是Python 3.x并且系统中同时安装了Python 2.x,你可能需要使用以下命令:

    pip3 install PyMuPDF
    
  3. 等待安装完成。

    安装完成即可使用
    输入以下命令来安装PyMuPDF:

    pip install PyMuPDF
    

    或者,如果你使用的是Python 3.x并且系统中同时安装了Python 2.x,你可能需要使用以下命令:

    pip3 install PyMuPDF
    
  4. 等待安装完成。

    安装完成即可使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值