簡體   English   中英

從文件中讀取行,然后僅將這些行寫入不包含某個短語的文件

[英]Read lines from file and subsequently only write those lines to the file which don't contain a certain phrase

我有一個列列表文件:

$ cat test
blah
blahblah
blah22
bluh
blih
blihihih

我想要是刪除blah般的線條。 (相當於bash grep -v blah 。)所以blahblahblahblah22被刪除了。

到目前為止我有這個:

>>> f = open('test', 'rw+')
>>> line = f.readlines()
>>> for l in line:
...     if l.find('blah') == -1:
...             f.truncate(0)
...             f.write(l)
... 
>>> f.close()  

我認為這樣會很好,但在運行之后,從測試文件中只剩下這一行:

$cat test
blihihih  

怎么來,這已經取消了blihbluh

怎么來,這已經取消了blihbluh

要回答您的問題,請經常截斷文件。 每次調用f.truncate(0)都會將文件大小重置為0.因此只有最后一行blihihih才能生存。

如果你想一次性完成:

f = open('test.txt', 'r+')
lines = f.readlines()
f.seek(0)
for line in lines:
    if line.find('blah') < 0:
        f.write(line)
f.truncate()
f.close()

此外,你應該使用with

with open('test.txt', 'r+') as f:
    lines = f.readlines()
    f.seek(0)
    for line in lines:
        if line.find('blah') < 0:
            f.write(line)
    f.truncate()

(你不需要寫f.close()然后。閱讀更多關於為什么with 這里使用的例子。)

我認為最好先打開文件,然后寫入:

# open file
lines = open('test').readlines()

# over-write the file
with open('test', 'w') as out:
    for line in lines:
        if 'blah' not in line:
            out.write(line)

輸出 (測試中)

bluh
blih
blihihih

暫無
暫無

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

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