繁体   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