jim
jim

Reputation: 9

Remove lines from a text file which do not contain a certain string with python

I am trying to form a quotes file of a specific user name in a log file. How do I remove every line that does not contain the specific user name in it? Or how do I write all the lines which contain this user name to a new file?

Upvotes: 0

Views: 5196

Answers (4)

John
John

Reputation: 15286

I know you asked for python, but if you're on unix this is a job for grep.

grep name file

If you're not on unix, well... the answer above does the trick :)

Upvotes: 1

aaronasterling
aaronasterling

Reputation: 71014

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)

Or if you don't want to store all the lines in memory

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)

I sort of like the first one better but for a large file, it might drag.

Upvotes: 3

pyfunc
pyfunc

Reputation: 66709

Something along this line should suffice:

newfile = open(newfilename, 'w')
for line in file(filename, 'r'):
    if name in line:
        newfile.write(line)
newfile.close()

See : http://docs.python.org/tutorial/inputoutput.html#methods-of-file-objects

f.readlines() returns a list containing all the lines of data in the file.

An alternative approach to reading lines is to loop over the file object. This is memory efficient, fast, and leads to simpler code

>>> for line in f:
        print line

Also you can checkout the use of with keyword. The advantage that the file is properly closed after its suite finishes

>>> with open(filename, 'r') as f:
...     read_data = f.read()
>>> f.closed
True

Upvotes: 2

Ignacio Vazquez-Abrams
Ignacio Vazquez-Abrams

Reputation: 798716

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

Upvotes: 3

Related Questions