删除文本文件中不包含与Python的某个字符串的行
东西沿着这条线就足够了:
newfile = open(newfilename, 'w')
for line in file(filename, 'r'):
if name in line:
newfile.write(line)
newfile.close()
参见:http://docs.python.org/tutorial/inputoutput.html#methods-of-file-objects
f.readlines()返回一个包含文件中的数据的所有行的列表。
读取行的另一种方法是循环遍历文件对象。这是内存高效,快速,并导致简单的代码
>>> for line in f:
print line
你也可以检出使用with
关键字。该文件是其整套后正常关闭的优势结束
>>> with open(filename, 'r') as f:
... read_data = f.read()
>>> f.closed
True
with open('input.txt', 'r') as rfp:
with open('output.txt', 'w') as wfp:
for line in rfp:
if ilikethis(line):
wfp.write(line)
with open(logfile) as f_in:
lines = [l for l in f_in if username in l]
with open(outfile, 'w') as f_out:
f_out.writelines(lines)
或者,如果你不想在内存中存储
with open(logfile) as f_in:
lines = (l for l in f_in if username in l)
with open(outfile, 'w') as f_out:
f_out.writelines(lines)
我有点像所有的行第一个更好,但对于大文件,它可能会拖动。
你并不需要缩进第二“与”在第二种情况下,出于同样的原因,你不需要在第一种情况下。 – 2010-11-30 05:49:34
@Karl Knechtel我确实在做。因为在第二种情况下,我使用了一个生成器表达式,因此如果`with`语句退出,那么当生成器表达式实际得到处理时,该文件将被关闭并导致错误。尝试一下。这是我能想到的在文件处理中使用生成器表达式的唯一技巧。 – aaronasterling 2010-11-30 05:51:25
我知道你问过python,但是如果你在unix上,这是grep的一份工作。
grep name file
如果你不是在UNIX上,以及...答案上面的伎俩:)
这是完美 – pyfunc 2010-11-30 05:12:04