原文地址:https://itxiaozhang.com/batch-text-file-merging/
如果您需要远程电脑维修或者编程开发,请加我微信咨询。

场景

假设我们有一个项目文件夹 documents,其中包含了多个子文件夹,每个子文件夹中都存放着我们需要合并的文本文件。我们想要将这些文本文件合并为一个单独的文件,以便于后续的查阅和分析。

功能

  • 自动合并文本文件: 该工具能够自动合并指定文件夹中的所有Markdown(.md)和txt格式的文本文件,无需手动逐个文件进行合并操作。

  • 自动排序: 在合并过程中,工具会按照文本文件的创建时间对其进行排序,以确保合并后的内容顺序正确,避免错乱。

  • 输出文件保存: 合并后的文本内容将保存到一个输出文件中,方便查阅和使用。

示例

  1. 准备文件夹: 在您的计算机上创建一个名为 documents 的文件夹,然后在其中创建多个子文件夹,每个子文件夹中存放着需要合并的文本文件。

    1
    2
    3
    4
    5
    6
    7
    8
    
    documents/
    ├── folder1/
    │   ├── report1.md
    │   └── notes1.txt
    ├── folder2/
    │   ├── report2.md
    │   └── notes2.txt
    └── merge_text_files.py
    
  2. 运行脚本: 打开命令行界面(Command Prompt或Terminal),导航到包含 merge_text_files.py 脚本文件的目录。

  3. 执行合并操作: 在命令行中运行以下命令:

    1
    
    python merge_text_files.py
    
  4. 查看结果: 脚本会开始合并文本文件,并在完成后显示合并结果的信息。合并后的结果将保存在与每个子文件夹同名的输出文件中,例如 folder1.txtfolder2.txt

代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

import os

def get_sorted_text_files(folder_path):
    """
    获取指定文件夹中的所有文本文件(包括Markdown和txt文件),并按照创建时间排序。
    """
    text_files = []

    try:
        # 遍历文件夹,找到所有文本文件
        for root, dirs, files in os.walk(folder_path):
            for file in files:
                if file.endswith(".md") or file.endswith(".txt"):
                    file_path = os.path.join(root, file)
                    file_stat = os.stat(file_path)
                    text_files.append((file_path, file_stat.st_mtime))

        # 按文件创建时间排序
        text_files.sort(key=lambda x: x[1])

    except FileNotFoundError:
        print("错误: 指定的文件夹路径不存在,请检查路径是否正确。")
    except PermissionError:
        print("错误: 无权限访问指定的文件夹,请检查文件夹权限。")
    except Exception as e:
        print(f"错误: 获取文本文件时发生错误: {str(e)}")

    return text_files

def merge_text_files_to_output(folder_path, output_file):
    """
    合并指定文件夹中的所有文本文件,并将结果保存到输出文件中。
    """
    try:
        # 获取排序后的文本文件列表
        text_files = get_sorted_text_files(folder_path)

        # 合并文件
        with open(output_file, 'w', en编程案例='utf-8') as output:
            for text_file, _ in text_files:
                with open(text_file, 'r', en编程案例='utf-8') as f:
                    output.write(f.read())
                    output.write('\n\n')  # 添加换行符区分不同文件内容

        print(f"合并完成,合并后的文件保存为: {output_file}")