[英]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.