2017-02-26 124 views
1
file1 = open('/path/to/file1.txt', "r") 
file2 = open('/path/to/file2.txt', "wa") 
counter = 1 

for line in file1: 
    new_string = str(counter) + '\t' + line 
    file2.write(new_string) 
    counter += 1 

我想将一个数字添加到文件中每行的开头,并将此行逐行添加到新文件中。原始文件中有1189行文本,尽管进行了多次尝试,但新文件中只有1168行。这是怎么回事?python从文件中读取写入其他文件

我添加了一个打印语句(print str(counter)+“”+ line),原始文件中的所有行都打印出来,并在它们旁边打印出预期的数字。循环运行后,计数器变量为1190。

编辑: 在循环工作后插入file2.close(),所有1189行现在都在第二个文件中,但是为什么?

+0

为什么?你必须关闭文件,这是怎么回事。当关闭文件时,表明您已完成工作,因此操作系统可以将所有更改“提交”到磁盘。换一种方式来看,如果没有“关闭”声明,每次写入内容时,程序都必须写入磁盘,这显然是效率低下的。 – mosh442

+0

我可以理解,如果我们不关闭额外​​的信息可能会被写入文件,但为什么信息会被删除? – schnimmy

+0

这里的关键是没有删除任何信息。当你的代码执行file2.write(new_string)时,这个写入不会进入文件。它进入缓冲区,然后刷新到文件。如果您不关闭文件,则可能会丢失缓冲区。 – mosh442

回答

1

您是否关闭了正在写入的文件,即在循环后执行file2.close()

+0

不,我不这样做,如果有21条线路丢失,怎么会有影响? – schnimmy

+0

尝试关闭文件,以便刷新所有文件缓冲区。 – lukeg

+0

它的工作!为什么?? – schnimmy

1

您的file1file2指向您提供的代码示例中的同一个文件。

+0

是的,我复制和粘贴的路径,但我绝对使用不同的文件 – schnimmy