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

时间:2013-03-11 16:33:39

标签: python text-files

我想将某些文本文件从一个文本文件复制到另一个文本文件。在我当前的脚本中,当我搜索字符串后,它会复制所有内容,如何复制文本的某个部分?例如。只有在其中包含“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()

9 个答案:

答案 0 :(得分:61)

oneliner:

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) 

答案 1 :(得分:6)

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)

答案 2 :(得分:6)

这是一个略微清理的方式。这并不比ATOzTOA的回答更多或更少,但没有理由做两个单独的陈述。

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)

答案 3 :(得分:1)

f=open('list1.txt')  
f1=open('output.txt','a')
for x in f.readlines():
    f1.write(x)
f.close()
f1.close()

这可以正常工作100%尝试一次

答案 4 :(得分:0)

安全且省钱:

with open("out1.txt", "w") as fw, open("in.txt","r") as fr: 
    fw.writelines(l for l in fr if "tests/file/myword" in l)

它不会创建临时列表(readline[]将执行哪些操作,如果文件很大,这是一个非启动列表),所有这些都是使用生成器理解完成的,并使用{{ 1}}块确保文件在退出时关闭。

答案 5 :(得分:0)

以open(“list1.txt”)作为f:     doIHaveToCopyTheLine = False     '''在写模式下打开输出文件'''     使用open(“output.txt”,“w”)作为f1:         '''逐行迭代'''         对于f中的行:             如果'tests / file / myword'排成一行:                 doIHaveToCopyTheLine = True             elif doIHaveToCopyTheLine:                 f1.write(线)

f1.close() f.close()

答案 6 :(得分:0)

如果所有方法都无效,请尝试此操作。

with open("hello.txt") as f:
with open("copy.txt", "w") as f1:
    for line in f:
        f1.write(line)

答案 7 :(得分:0)

在带有括号的上下文管理器的 Python 3.10 中,您可以在一个块中使用多个上下文管理器:

with (open('list1.txt', 'w') as fout, open('output.txt') as fin):
    fout.write(fin.read())

答案 8 :(得分:-1)

f = open('list1.txt')
f1 = open('output.txt', 'a')

# doIHaveToCopyTheLine=False

for line in f.readlines():
    if 'tests/file/myword' in line:
        f1.write(line)

f1.close()
f.close()

现在您的代码将正常运行。试试这个。