如何将file.txt每行内容分别写入独立文件?
问题分析与解决办法
你的问题出在文件打开的时机不对!看你的代码:你只在循环外面打开了file0这一个文件,然后把所有行都塞进这个文件里了,循环里的cnt虽然在增加,但根本没触发新文件的创建——因为打开文件的代码根本没在循环里跑啊!
正确的写法(推荐用enumerate更简洁)
直接用enumerate遍历原文件的每一行,它会自动帮你维护行号(从0开始),每拿到一行就打开对应的新文件写入:
with open("file.txt", 'r') as f: # enumerate会返回(索引, 行内容),索引从0开始正好对应你要的file0/file1/file2 for file_num, line in enumerate(f): # 每次循环都创建/打开对应的目标文件,写入当前行 with open(f"file{file_num}", "w") as target_file: # 如果不想保留原文件里的换行符,可以加.strip('\n'),按需选择 target_file.write(line)
或者调整你原来的代码结构
如果你想保留自己最初的思路,只要把打开目标文件的代码放进for循环里就行:
cnt = 0 with open("file.txt", 'r') as f: x = f.readlines() # 把打开文件的操作移到循环内部,每一行对应一个新文件 for single_line in x: with open(f"file{cnt}", "w") as g: g.write(single_line) cnt = cnt + 1
为什么原来的代码不行?
再回顾下你的原代码逻辑:
- 先把所有行读进列表
x - 打开
file0(此时cnt=0) - 然后在循环里把
x的每一行都写入这个已经打开的file0 - 循环里
cnt虽然在加,但没有重新打开新文件的操作,所以file1和file2根本不会被创建
调整后,每循环一次就会打开一个新的fileN文件,写完就自动关闭,这样就能实现每行内容写入独立文件的需求啦。
内容的提问来源于stack exchange,提问作者Mr. Wizard
相关产品推荐
相关产品推荐

