使用Python将一个文本文件复制到另一个文本文件

42 投票
7 回答
209376 浏览
提问于 2025-04-17 18:42

我想把一个文本文件中的某些行复制到另一个文本文件里。在我现在的脚本中,当我搜索一个字符串时,它会把后面的所有内容都复制过来,我该怎么做才能只复制文本的某一部分呢?比如说,只复制包含“tests/file/myword”的行?

当前代码:

#!/usr/bin/env python
f = open('list1.txt')
f1 = open('output.txt', 'a')

doIHaveToCopyTheLine=False

for line in f.readlines():

    if 'tests/file/myword' in line:
        doIHaveToCopyTheLine=True

    if doIHaveToCopyTheLine:
        f1.write(line)

f1.close()
f.close()

7 个回答

9

这只是一个稍微整理过的做法。这个方法的性能和ATOzTOA的回答一样好,也没有比它更差,但没有必要使用两个单独的with语句。

with open(path_1, 'a') as file_1, open(path_2, 'r') as file_2:
    for line in file_2:
        if 'tests/file/myword' in line:
            file_1.write(line)
10

readlines()这个方法会把整个输入文件的内容读进一个列表里,但它的效率不高。更好的做法是直接逐行读取文件中的内容。我在处理output.txt的时候用了'with',这样文件在用完后会自动关闭。对于list1.txt来说,就不需要这样做,因为当for循环结束时,文件会自动关闭。

#!/usr/bin/env python
with open('output.txt', 'a') as f1:
    for line in open('list1.txt'):
        if 'tests/file/myword' in line:
            f1.write(line)
85

这是一行代码的写法:

open("out1.txt", "w").writelines([l for l in open("in.txt").readlines() if "tests/file/myword" in l])

推荐使用 with 语句:

with open("in.txt") as f:
    lines = f.readlines()
    lines = [l for l in lines if "ROW" in l]
    with open("out.txt", "w") as f1:
        f1.writelines(lines)

这样可以减少内存的使用:

with open("in.txt") as f:
    with open("out.txt", "w") as f1:
        for line in f:
            if "ROW" in line:
                f1.write(line) 

撰写回答