从CSV读取PDF文件名并合并PDF:CSV打乱流程优化咨询
问题解答
1. 能否省略写入新CSV的步骤?
当然可以!完全没必要多写一次中间CSV文件——你可以直接在内存里使用打乱后的文件名列表来执行PDF合并操作,这样既省磁盘空间,又能减少IO操作提升效率。
2. 整合打乱+合并PDF的实现代码
我们可以用PyPDF2库来完成PDF合并,先确保你已经安装了它:
pip install PyPDF2
下面是把打乱文件名、合并PDF整合在一起的完整代码,全程不需要生成中间CSV:
import csv import random from PyPDF2 import PdfMerger # 读取原始CSV里的PDF文件名 with open('input.csv', 'r', newline='') as f: reader = csv.reader(f) # 提取所有PDF文件名,如果你的CSV有表头,记得加一行:pdf_files = pdf_files[1:] 跳过表头 pdf_files = [row[0] for row in reader] # 直接在内存里打乱文件名列表 random.shuffle(pdf_files) # 初始化PDF合并工具 merger = PdfMerger() # 逐个添加打乱后的PDF文件 for pdf_path in pdf_files: try: merger.append(pdf_path) print(f"已添加: {pdf_path}") except Exception as e: print(f"添加失败 {pdf_path}: {str(e)}") # 保存最终合并的PDF merger.write("merged_random.pdf") merger.close() print("PDF合并完成!文件已保存为merged_random.pdf")
代码小说明:
- 用
with语句处理文件,自动帮你关闭文件,更安全省心。 - 加入了异常处理,就算某个PDF文件损坏或找不到,也不会导致整个程序崩溃。
- 如果你的CSV里存的是带路径的文件名(比如
./docs/R001.pdf),确保路径和代码运行目录匹配就行。
要是你已经生成了random.csv,也可以单独读取它来合并,代码如下:
import csv from PyPDF2 import PdfMerger # 读取已打乱的CSV文件 with open('random.csv', 'r', newline='') as f: reader = csv.reader(f) pdf_files = [row[0] for row in reader] # 合并逻辑和上面一致 merger = PdfMerger() for pdf_path in pdf_files: try: merger.append(pdf_path) except Exception as e: print(f"跳过 {pdf_path}: {str(e)}") merger.write("merged_from_random_csv.pdf") merger.close()
额外小提示
如果遇到加密的PDF文件,PyPDF2可能处理不了,这时候可以试试PyMuPDF(fitz)库,它对加密PDF的兼容性更好。
内容的提问来源于stack exchange,提问作者Fabian
相关产品推荐
相关产品推荐

