批量文本文件合并

场景

假设我们有一个项目文件夹 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}")

批量文本文件合并
https://itxiaozhang.com/batch-text-file-merging/
作者
小章
发布于
2024年3月23日
许可协议