我正在编写一个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()
答案 0 :(得分:12)
您可以通过迭代文件对象本身来迭代Python中文件对象中的行:
for line in f:
copy.write(line)
读取行的另一种方法是遍历文件对象。这是内存效率高,速度快,并且代码更简单:
>>> 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
的回答