text_file = open("new.txt", "r")
lines = text_file.readlines()
for line in lines:
var1, var2 = line.split(",");
myfile = open('xyz.txt', 'w')
myfile.writelines(var1)
myfile.close()
text_file.close()
我在new.txt中有10行文字,如Adam:8154 乔治:5234等等。现在我想要一个只包含名称的文本文件。 xyz.txt必须包含Adam George等。现在上面的代码只留下了第10个名字。
如何在一个文本文件中包含所有10个名称。
答案 0 :(得分:28)
这是因为你在for循环中打开,写入和关闭文件10次
myfile = open('xyz.txt', 'w')
myfile.writelines(var1)
myfile.close()
您应该在外面打开和关闭文件以进行循环。
myfile = open('xyz.txt', 'w')
for line in lines:
var1, var2 = line.split(",");
myfile.write("%s\n" % var1)
myfile.close()
text_file.close()
你还应该注意到使用写和不是writelines 。
writelines
将一系列行写入您的文件。
另外,您应该查看这里使用with
语句的人发布的答案。这是在Python中进行文件读/写操作的优雅方式
答案 1 :(得分:14)
主要问题是你在循环中反复打开/关闭文件。
尝试这种方法:
with open('new.txt') as text_file, open('xyz.txt', 'w') as myfile:
for line in text_file:
var1, var2 = line.split(",");
myfile.write(var1+'\n')
我们一次打开这两个文件,因为我们正在使用with
,所以当我们完成(或发生异常)时,它们将自动关闭。以前,您的输出文件在循环中重复打开。
我们也在逐行处理文件,而不是一次性将所有读取到内存中(当处理非常大的文件时可能会出现问题)。
请注意,write()
不会附加换行符('\n'
),因此如果您需要,则必须自行填写(我已将writelines()
替换为write()
当你在写一个项目时,而不是项目列表。)
打开r
读取的文件时,'r'
是可选的,因为它是默认模式。
答案 2 :(得分:9)
最好使用上下文管理器自动关闭文件
with open("new.txt", "r"), open('xyz.txt', 'w') as textfile, myfile:
for line in textfile:
var1, var2 = line.split(",");
myfile.writelines(var1)