使用Python统计PDF内图片数量并写入CSV的问题求助
问题原因
- 第一段代码未实现页面遍历逻辑,也没有对
image_list、page_index变量赋值,读取的是无效的变量值,因此结果和实际不符 - 第二段代码遍历文件时没有将当前打开的PDF赋值给
doc变量,也没有做累计计数逻辑,仅将最后一个图片对象转为字符串输出,因此所有文件返回结果相同
可用实现方案
方案1:仅输出文件名+总图片数
import fitz import csv import os # 替换为你自己的PDF文件路径列表 pdfs = ["test1.pdf", "test2.pdf"] with open(r'output.csv', 'w', newline='', encoding='utf-8') as csvfile: propertyWriter = csv.writer(csvfile, quoting=csv.QUOTE_ALL) propertyWriter.writerow(['文件名', '总图片数', '错误信息']) for file_path in pdfs: total_img = 0 error_msg = "" try: # 打开当前PDF文件 doc = fitz.open(file_path) # 遍历每一页统计图片数 for page in doc: img_list = page.get_images() total_img += len(img_list) doc.close() except Exception as e: error_msg = str(e) # 仅需要文件名的话可以把file_path替换为os.path.basename(file_path) propertyWriter.writerow([file_path, total_img, error_msg])
方案2:输出每页图片明细
import fitz import csv import os # 替换为你自己的PDF文件路径列表 pdfs = ["test1.pdf", "test2.pdf"] with open(r'output_detail.csv', 'w', newline='', encoding='utf-8') as csvfile: propertyWriter = csv.writer(csvfile, quoting=csv.QUOTE_ALL) propertyWriter.writerow(['文件名', '总图片数', '每页图片数', '错误信息']) for file_path in pdfs: total_img = 0 page_img_counts = [] error_msg = "" try: doc = fitz.open(file_path) for page_idx, page in enumerate(doc, start=1): img_count = len(page.get_images()) page_img_counts.append(f"第{page_idx}页:{img_count}张") total_img += img_count doc.close() except Exception as e: error_msg = str(e) propertyWriter.writerow([ file_path, total_img, ",".join(page_img_counts), error_msg ])
说明
直接调用page.get_images()方法获取当前页的所有图片对象列表,长度就是当前页的图片数量,不需要额外处理图片内容,统计效率更高。
内容的提问来源于stack exchange,提问作者Maverick
相关产品推荐
相关产品推荐

