[英]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
。)所以blah
, blahblah
和blah22
被刪除了。
到目前為止我有這個:
>>> 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
怎么來,這已經取消了blih
或bluh
?
怎么來,這已經取消了
blih
或bluh
?
要回答您的問題,請經常截斷文件。 每次調用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.