如何从两个文件数据生成新文件?代码执行无报错但目标文件为空
解决文件合并后f3为空的问题
看起来你的核心问题是完全没有在代码中对目标文件f3(merge3.txt)进行写入操作,另外还有几处代码逻辑不完整的地方,我来一步步帮你修正:
问题分析
- 你提供的代码里没有打开
merge3.txt的语句,也没有任何往这个文件写入内容的逻辑,这就是它一直为空的根本原因 - 生成merge2.txt的代码不完整(
liste = ['a','b','c']...没有写完),如果循环5次的话会因为列表长度不足出现索引越界错误 - 用
range(5)来循环读取文件不够健壮,直接迭代文件对象本身读取每一行是更可靠的方式
修正后的完整代码
我会分成三个部分:生成源文件、合并到目标文件,全部用Pythonic的with语句来自动管理文件(避免忘记关闭文件导致的内容未写入问题)
1. 生成merge1.txt(对应你说的文件f)
# 生成包含"employé numero 1"到"employé numero 5"的merge1.txt with open(r'c:\temp\merge1.txt', 'w', encoding='utf8') as f: for i in range(5): f.write(f"employé numero {i+1}\n")
2. 生成merge2.txt(对应你说的文件f2)
补全列表内容,生成5行对应a到e的内容:
# 生成包含a、b、c、d、e的merge2.txt with open(r'c:\temp\merge2.txt', 'w', encoding='utf8') as f2: for char in ['a', 'b', 'c', 'd', 'e']: f2.write(f"{char}\n")
3. 合并到merge3.txt(对应你说的文件f3)
这是核心步骤,同时读取两个源文件的对应行,拼接后写入目标文件:
# 合并两个文件到merge3.txt with open(r'c:\temp\merge1.txt', 'r', encoding='utf8') as f, \ open(r'c:\temp\merge2.txt', 'r', encoding='utf8') as f2, \ open(r'c:\temp\merge3.txt', 'w', encoding='utf8') as f3: # 同时迭代两个文件的行,自动按顺序配对 for line_f, line_f2 in zip(f, f2): # 去掉每行末尾的换行符,拼接后添加换行 combined_line = f"{line_f.strip()} {line_f2.strip()}\n" f3.write(combined_line)
额外说明
- 使用
with语句的好处是:代码块结束后会自动关闭文件,避免手动close()可能遗漏的问题,同时确保缓冲区的内容被写入磁盘 - 如果两个源文件的行数不一致,
zip()会以行数少的文件为准停止迭代;如果需要处理行数不一致的情况,可以用itertools.zip_longest来填充缺失的行 strip()用来移除每行末尾的换行符,避免拼接后出现多余的空白或者换行
内容的提问来源于stack exchange,提问作者Antoine Gazanion
相关产品推荐
相关产品推荐

