在for循环中写入文件

时间:2012-06-25 23:13:26

标签: python python-2.7

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个名称。

3 个答案:

答案 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)