如何高效合并多个文本文件指定行并添加文件名至输出文件?
批量提取文本文件指定行并生成Excel兼容文件的优化方案
需求说明
有数百个结构、行数一致的test*.txt文本文件,需提取每个文件的第20-25行,存入可在Excel中编辑的文本文件,同时在对应数据旁或上方标注文件名。原手动编写的重复代码效率极低,需要优化。
原代码问题
原代码通过手动逐个处理文件,存在以下问题:
- 重复代码冗余,新增文件需手动复制修改代码
- 使用
readlines()读取整个文件到内存,处理大量文件时内存占用高 - 未使用上下文管理器,存在文件未正确关闭的风险
file1 = open("test01.txt", "r") content = file1.readlines() file1 = open("values.txt","w") file1.write("test01.txt" + "\n") file1.writelines(content[33:36]) file1.close() file1 = open("test02.txt", "r") content = file1.readlines() #Append-adds at last file1 = open("values.txt","a")#append mode file1.write("test02.txt" + "\n") file1.writelines(content[33:36]) file1.close() file1 = open("test03.txt", "r") content = file1.readlines() #Append-adds at last file1 = open("values.txt","a")#append mode file1.write("test03.txt" + "\n") file1.writelines(content[33:36]) file1.close()
优化方案
使用glob批量匹配文件,结合上下文管理器和逐行读取,生成CSV格式文件(天然兼容Excel):
import glob # 定义要提取的行范围(第20-25行,Python索引从0开始,对应19到24) start_line = 19 end_line = 24 # 打开输出文件,用CSV格式方便Excel编辑 with open("output.csv", "w", encoding="utf-8") as out_file: # 遍历所有test*.txt文件 for file_path in glob.glob("test*.txt"): # 写入文件名作为标识 out_file.write(f"文件名: {file_path}\n") # 逐行读取源文件,只保留目标行 with open(file_path, "r", encoding="utf-8") as in_file: for line_num, line in enumerate(in_file): if start_line <= line_num <= end_line: # 写入目标行,保留原换行符 out_file.write(line) # 写入空行分隔不同文件的数据 out_file.write("\n")
代码说明
glob.glob("test*.txt"):自动匹配所有符合命名规则的文件,无需手动逐个指定- 上下文管理器
with:自动处理文件打开/关闭,避免资源泄漏 - 逐行读取文件:仅读取需要的行,大幅减少内存占用,适合处理大量文件
- 输出为CSV格式:Excel可直接打开编辑,若需要更规范的表格结构,可修改为每行包含文件名和对应行内容(例如用逗号分隔)
内容的提问来源于stack exchange,提问作者evolive smyle
相关产品推荐
相关产品推荐

