遍历文件夹文件合并生成新文本文件,仅获取单个文件内容问题求解
问题诱因
- 输出文件打开模式错误:代码在循环处理每个文件时,都以
w(覆盖写入)模式打开输出文件,每次写入新文件内容前都会清空之前已写入的内容,最终合并文件仅会保留最后一个处理的文件的内容。 - 路径处理逻辑错误:
os.walk返回的name是纯文件名,本身不包含路径分隔符,name.split("/")取首段的逻辑完全无效,拼接出来的inputf路径大概率和实际要读取的文件路径不匹配。 - 多余的循环嵌套:遍历
text_file时已经是逐行读取内容,内层再遍历info相当于逐字符写入,会严重拉低写入效率。 - 输出文件路径、输入文件基础路径的定义放在循环内部,重复执行无意义,还容易引发路径错误。
修复后的代码
import os projpath1 = 'PATH1' projpath2 = 'PATH2' updatedf = os.path.expanduser(f'{projpath2}/ENC_merged.txt') # 输出文件仅打开一次,用w模式直接写入所有内容 with open(updatedf, 'w', encoding='utf-8') as outfile: for root, dirs, files in os.walk(projpath1, topdown=False): for name in files: if name.startswith('.DS_Store'): continue # 直接用os.path.join拼接的完整路径作为输入文件路径 inputf = os.path.join(root, name) with open(inputf, 'r', encoding='utf-8') as text_file: # 逐行写入,无需多余嵌套 for line in text_file: outfile.write(line)
核心修改点
- 把输出文件的打开逻辑移到循环外,仅打开一次,避免重复覆盖内容
- 修正输入文件路径拼接逻辑,直接使用
os.walk返回的根路径和文件名拼接的完整路径读取文件 - 删除多余的内层循环,提升读写效率
- 新增编码参数指定,避免不同系统默认编码不一致引发的读写乱码问题
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

