You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遍历文件夹文件合并生成新文本文件,仅获取单个文件内容问题求解

问题诱因
  • 输出文件打开模式错误:代码在循环处理每个文件时,都以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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:57:03