怎么用脚本合并多个文档

wen 实用脚本 1

本文目录导读:

怎么用脚本合并多个文档

  1. 合并PDF文件
  2. 合并Word文档
  3. 合并文本文件
  4. 批量合并所有格式文件
  5. 命令行批处理脚本
  6. 高级功能:带元数据的合并脚本
  7. 使用建议

我来介绍几种合并多个文档的方法,包括不同格式的文档合并:

合并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"合并完成,元数据已保存")

使用建议

  1. 安装所需库

    pip install PyPDF2 python-docx pdfkit
  2. 选择合适的方法

    • PDF文件:使用PyPDF2或pdftk
    • Word文件:使用python-docx
    • 纯文本:使用Python内置函数
  3. 处理大文件:考虑内存限制,使用流式处理

  4. 出错处理:添加异常处理和日志记录

需要根据具体需求选择合适的方法,并确保安装了必要的依赖库。

抱歉,评论功能暂时关闭!