8

我正在编写一个 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

5 回答 5

15

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

for line in f:
    copy.write(line)

文件对象的文档中

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

>>> for line in f:
        print line,
于 2012-07-20T17:39:40.643 回答
13

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

f = open("...", "r")
copy = open("...", "w")
for line in f:
    copy.write(line)
f.close()
copy.close()
于 2012-07-20T17:43:04.853 回答
3

请参阅shutil模块以获得比逐行复制更好的方法:

shutil.copyfile(src, dst)

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

编辑: 您的问题说您正在逐行复制,因为源文件是易失性的。你的设计有些不对劲。您能否分享有关您正在解决的问题的更多详细信息?

于 2012-07-20T17:44:32.573 回答
0

处理大数据时,逐行写入可能会很慢。您可以通过一次读/写一堆行来加速读/写操作。请在此处参考我对类似问题的回答

于 2017-10-04T16:07:51.413 回答
0

使用with语句:

with open("input.txt", "r", encoding="utf-8") as input_file:
  with open("output.txt", "w", encoding="utf-8") as output_file:
    for input_line in input_file:
      output_line = f(input_line) # You can change the line here
      output_file.write(output_line)

请注意,input_line包含行尾字符(\n\r\n),如果有的话。

于 2022-02-27T10:23:51.633 回答