在python中逐行复制文件

时间:2012-07-20 17:36:45

标签: python

我正在编写一个python程序来逐行将文件复制到一个新文件中。我的代码如下所示,我使用循环逐行复制文件。

然而,由于文件中的行数可能会改变,有没有办法在python中逐行复制文件而不使用依赖于数字的循环,而是依赖于类似EOF字符的东西来终止循环?

import os
import sys

i = 0
f = open("C:\\Users\\jgr208\\Desktop\\research_12\\sap\\beam_springs.$2k","r")
copy = open("C:\\Users\\jgr208\\Desktop\\research_12\\sap\\copy.$2k","wt")
#loop that copies file line by line and terminates loop when i reaches 10
while i < 10:
     line = f.readline()
     copy.write(str(line))
     i = i +1
f.close()
copy.close()

4 个答案:

答案 0 :(得分:12)

您可以通过迭代文件对象本身来迭代Python中文件对象中的行:

for line in f:
    copy.write(line)

来自docs on file objects

  

读取行的另一种方法是遍历文件对象。这是内存效率高,速度快,并且代码更简单:

>>> for line in f:
        print line,

答案 1 :(得分:8)

可以直接迭代文件,而无需显式调用readline

f = open("...", "r")
copy = open("...", "w")
for line in f:
    copy.write(line)
f.close()
copy.close()

答案 2 :(得分:3)

有关更好的方法,请参阅shutil模块,而不是逐行复制:

  

shutil.copyfile(src, dst)

     

复制的内容(无元数据)   名为src的文件名为dst。 dst必须是完整的目标   文件名;查看shutil.copy()以获取接受目标的副本   目录路径。如果src和dst是相同的文件,则引发Error。   目的地位置必须是可写的;否则,IOError   异常将被提出。如果dst已经存在,它将被替换。   特殊文件,如字符或块设备和管道不能   使用此功能复制。 src和dst是给出的路径名   字符串。

编辑:您的问题是您要逐行复制,因为源文件是易变的。你的设计有些不对劲。您能否分享一下您正在解决的问题的更多细节?

答案 3 :(得分:0)

使用大数据时,逐行写入可能会很慢。您可以通过一次读取/写入一堆行来加速读/写操作。请参阅我对类似问题here

的回答