31
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, George:5234等等。现在我想要一个只包含名称的文本文件。xyz.txt必须包含Adam,George等。上面的代码只给我留下了第 10 个名字。

如何在一个文本文件中包含所有 10 个名称?

4

3 回答 3

51

那是因为您在 for 循环中打开、写入和关闭文件 10 次

myfile = open('xyz.txt', 'w')
myfile.writelines(var1)
myfile.close()

您应该在 for 循环之外打开和关闭文件。

myfile = open('xyz.txt', 'w')
for line in lines:
    var1, var2 = line.split(",");
    myfile.write("%s\n" % var1)

myfile.close()
text_file.close()

您还应该注意使用 write不是 writelines

writelines将行列表写入文件。

此外,您应该查看这里使用with语句的人们发布的答案。这是在 Python 中进行文件读/写操作的优雅方式

于 2012-06-25T23:16:08.497 回答
26

主要问题是您在循环中反复打开/关闭文件。

试试这个方法:

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'是可选的,因为它是默认模式。

于 2012-06-25T23:18:10.190 回答
11

最好使用上下文管理器自动关闭文件

with open("new.txt", "r"), open('xyz.txt', 'w') as textfile, myfile:
    for line in textfile:
        var1, var2 = line.split(",");
        myfile.writelines(var1)
于 2012-06-25T23:19:11.290 回答