从文件中读取行,然后仅将不包含特定短语的那些行写入文件

时间:2018-12-31 21:56:48

标签: python list loops file-io

我有一个列列表文件:

$ 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

2 个答案:

答案 0 :(得分:2)

  

为什么删除了const dropDown = new Dropdown({ editor, monaco }); constructor(props) { super(props); // Define variables this.editor = props.editor; this.monaco = props.monaco; // Returns correct object console.log(this.monaco); // Bind functions this.changeLanguage = this.changeLanguage.bind(this); this.filterFunction = this.filterFunction.bind(this); this.dropDown = this.dropDown.bind(this); } changeLanguage(language) { // Returns undefined all the time console.log(this.monaco); this.monaco.editor.setModelLanguage(this.editor, language); }

要回答您的问题,请过于频繁地截断文件。每次调用blih都会将文件大小重置为0。因此,只有最后一行bluh可以保留。

如果您想一次完成:

f.truncate(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() here。)

答案 1 :(得分:1)

我认为最好先打开文件,然后再写入文件:

# 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