Подтвердить что ты не робот

Копирование из одного текстового файла в другой с помощью Python

Я хотел бы скопировать определенные строки текста из одного текстового файла в другой. В моем текущем script, когда я ищу строку, она копирует все после этого, как я могу скопировать только определенную часть текста? Например. только скопировать строки, когда в нем есть "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()
4b9b3361

Ответ 1

The 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) 

Ответ 2

readlines() считывает весь входной файл в список и не является хорошим исполнителем. Просто перебирайте строки в файле. Я использовал 'with' на output.txt, чтобы он автоматически закрывался, когда делался. Это не нужно для "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)

Ответ 3

Просто слегка очищенный способ сделать это. Это не более или менее показательно, чем ответ 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)

Ответ 4

Безопасность и сохранение памяти:

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 и [], что является не стартером, если файл огромен), все делается с помощью генераторных понятий, а использование блоков with гарантирует, что файлы закрываются при выходе.

Ответ 5

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()

Теперь ваш код будет работать. Попробуйте этот.