从文本文件中删除不包含python特定字符串的行

时间:2010-11-30 04:56:10

标签: python string text file-io file

我正在尝试在日志文件中形成特定用户名的引号文件。如何删除其中不包含特定用户名的每一行?或者如何将包含此用户名的所有行写入新文件?

4 个答案:

答案 0 :(得分:4)

with open('input.txt', 'r') as rfp:
  with open('output.txt', 'w') as wfp:
    for line in rfp:
      if ilikethis(line):
        wfp.write(line)

答案 1 :(得分:3)

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)

我有点像第一个更好但是对于大文件,它可能会拖延。

答案 2 :(得分:2)

沿着这条线的东西应该足够了:

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

答案 3 :(得分:1)

我知道你要求python,但是如果你在unix上这是grep的工作。

grep name file

如果你没有使用unix,那么......上面的答案可以解决问题:)