【发布时间】:2010-11-30 04:56:09
【问题描述】:
我正在尝试在日志文件中形成特定用户名的引号文件。如何删除其中不包含特定用户名的每一行?或者如何将包含此用户名的所有行写入新文件?
【问题讨论】:
标签: python string text file-io file
我正在尝试在日志文件中形成特定用户名的引号文件。如何删除其中不包含特定用户名的每一行?或者如何将包含此用户名的所有行写入新文件?
【问题讨论】:
标签: python string text file-io file
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)
我更喜欢第一个,但对于一个大文件,它可能会拖拽。
【讨论】:
with 语句退出,则在生成器表达式实际被处理时会导致错误。尝试一下。这是我能想到的将生成器表达式用于文件处理的唯一问题。
沿着这条线应该就足够了:
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
【讨论】:
我知道你要求 python,但如果你在 unix 上,这是 grep 的工作。
grep name file
如果您不在 unix 上,那么...上面的答案可以解决问题:)
【讨论】: