我有一个列列表文件:
$ 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
?
答案 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