本文目录导读:

我来介绍几种合并多个文档的方法,包括不同格式的文档合并:
合并PDF文件
Python方法(使用PyPDF2)
import PyPDF2
import os
def merge_pdfs(pdf_list, output_filename):
merger = PyPDF2.PdfMerger()
for pdf in pdf_list:
merger.append(pdf)
merger.write(output_filename)
merger.close()
print(f"合并完成:{output_filename}")
# 使用示例
pdf_files = ['file1.pdf', 'file2.pdf', 'file3.pdf']
merge_pdfs(pdf_files, 'merged.pdf')
使用pdfkit(需要wkhtmltopdf)
import pdfkit
def merge_pdfs_with_pdfkit(pdf_list, output_filename):
# 创建临时HTML文件
html_content = ""
for pdf in pdf_list:
html_content += f'<iframe src="{pdf}"></iframe><hr>'
with open('temp.html', 'w') as f:
f.write(html_content)
pdfkit.from_file('temp.html', output_filename)
合并Word文档
Python方法(使用python-docx)
from docx import Document
import os
def merge_docx(docx_list, output_filename):
merged_doc = Document()
for i, docx_file in enumerate(docx_list):
doc = Document(docx_file)
# 如果不是第一个文档,添加分页符
if i > 0:
merged_doc.add_page_break()
# 复制内容
for element in doc.element.body:
merged_doc.element.body.append(element)
merged_doc.save(output_filename)
print(f"合并完成:{output_filename}")
# 使用示例
word_files = ['doc1.docx', 'doc2.docx', 'doc3.docx']
merge_docx(word_files, 'merged_document.docx')
合并文本文件
Python方法
def merge_text_files(text_files, output_filename, separator="\n\n"):
try:
with open(output_filename, 'w', encoding='utf-8') as outfile:
for i, text_file in enumerate(text_files):
with open(text_file, 'r', encoding='utf-8') as infile:
content = infile.read()
outfile.write(content)
# 如果不是最后一个文件,添加分隔符
if i < len(text_files) - 1:
outfile.write(separator)
print(f"合并完成:{output_filename}")
except Exception as e:
print(f"出错:{e}")
# 使用示例
text_files = ['note1.txt', 'note2.txt', 'note3.txt']
merge_text_files(text_files, 'merged_text.txt')
批量合并所有格式文件
通用Python脚本
import os
import shutil
from pathlib import Path
def merge_documents_with_metadata(folder_path, output_folder):
"""
合并文件夹中的所有文档,自动识别格式
"""
# 创建输出文件夹
os.makedirs(output_folder, exist_ok=True)
# 获取所有支持的文档文件
supported_extensions = ('.txt', '.md', '.pdf', '.docx')
files_to_merge = []
for ext in supported_extensions:
files = list(Path(folder_path).glob(f'*{ext}'))
files_to_merge.extend(files)
# 按文件名排序
files_to_merge.sort()
# 按扩展名分组并合并
for ext in supported_extensions:
ext_files = [f for f in files_to_merge if f.suffix == ext]
if ext in ['.txt', '.md']:
# 合并文本文件
output_file = os.path.join(output_folder, f'merged{ext}')
merge_text_files([str(f) for f in ext_files], output_file)
elif ext == '.pdf':
# 合并PDF文件
from PyPDF2 import PdfMerger
merger = PdfMerger()
for pdf_file in ext_files:
merger.append(str(pdf_file))
merger.write(os.path.join(output_folder, 'merged.pdf'))
merger.close()
elif ext == '.docx':
# 合并Word文档
merge_docx([str(f) for f in ext_files],
os.path.join(output_folder, 'merged.docx'))
print(f"所有文档合并完成,输出到:{output_folder}")
# 使用示例
merge_documents_with_metadata('C:/documents/', 'C:/merged_output/')
命令行批处理脚本
Windows批处理
@echo off
:: 合并TXT文件
copy /b *.txt merged.txt
:: 合并PDF文件(需要安装pdftk)
pdftk *.pdf cat output merged.pdf
:: 合并Word文件(使用Windows脚本)
powershell -command "& { '合并Word文档...' }"
Linux/Mac Bash
#!/bin/bash # 合并TXT文件 cat *.txt > merged.txt # 合并PDF文件(需要pdftk) pdftk *.pdf cat output merged.pdf # 合并所有文件为PDF(使用libreoffice) soffice --headless --convert-to pdf *.docx *.doc
高级功能:带元数据的合并脚本
import json
from datetime import datetime
def advanced_merge_with_metadata(files, metadata=None):
"""
高级合并功能,可以添加元数据
"""
metadata = metadata or {
'created_by': 'Python Script',
'creation_date': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'total_files': len(files)
}
# 创建输出文件名
output_name = f"merged_{datetime.now().strftime('%Y%m%d_%H%M%S')}"
# 根据文件类型选择合并方法
extensions = set(Path(f).suffix.lower() for f in files)
if extensions == {'.pdf'}:
merge_pdfs(files, f'{output_name}.pdf')
elif extensions == {'.docx'}:
merge_docx(files, f'{output_name}.docx')
elif extensions <= {'.txt', '.md'}:
merge_text_files(files, f'{output_name}.txt')
else:
# 混合格式,转换并合并
print("混合格式需要先转换,请指定输出格式")
# 保存元数据
with open(f'{output_name}_metadata.json', 'w') as f:
json.dump(metadata, f, indent=2, ensure_ascii=False)
print(f"合并完成,元数据已保存")
使用建议
-
安装所需库:
pip install PyPDF2 python-docx pdfkit
-
选择合适的方法:
- PDF文件:使用PyPDF2或pdftk
- Word文件:使用python-docx
- 纯文本:使用Python内置函数
-
处理大文件:考虑内存限制,使用流式处理
-
出错处理:添加异常处理和日志记录
需要根据具体需求选择合适的方法,并确保安装了必要的依赖库。