簡體   English   中英

使用 Python 從一個文本文件復制到另一個文本文件

[英]Copying from one text file to another using Python

我想將某些文本行從一個文本文件復制到另一個文本文件。 在我當前的腳本中,當我搜索一個字符串時,它會在之后復制所有內容,如何僅復制文本的特定部分? 例如,只有在其中包含“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()

單線:

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) 

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)

只是一個稍微清理一下的方法。 這與 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)

安全省內存:

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塊確保文件在退出時關閉。

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

這將 100% 有效 嘗試一次

在帶有括號的上下文管理器的Python 3.10中,您可以在一個 with 塊中使用多個上下文管理器:

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

以open(“ list1.txt”)作為f:doIHaveToCopyTheLine = False'''以寫模式打開輸出文件''以open(“ output.txt”,'w')作為f1:'''逐行迭代'''代表f中的行:如果'tests / file / myword'位於該行中:doIHaveToCopyTheLine = True elif doIHaveToCopyTheLine:f1.write(line)

f1.close()f.close()

我想將某些文本行從一個文本文件復制到另一個文本文件。 在我當前的腳本中,當我搜索字符串時,它會隨后復制所有內容,如何只復制文本的特定部分? 例如,僅在其中包含“ 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()
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()

現在您的代碼將起作用。 試試這個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM