Search code examples
pythonloopsfileline

Python - ignore lines in a file


How does one ignore lines in a file?

Example:

If you know that the first lines in a file will begin with say, a or b and the remainder of lines end with c, how does one parse the file so that lines beginning a or b are ignored and lines ending c are converted to a nested list?

What I have so far:

fname = raw_input('Enter file name: ')

z = open(fname, 'r')

#I tried this but it converts all lines to a nested list

z_list = [i.strip().split() for i in z]

I am guessing that I need a for loop.

for line in z:
    if line[0] == 'a':
        pass
    if line[0] == 'b':
        pass
    if line[-1] == 'c':
        list_1 = [line.strip().split()]

The above is the general idea but I am expert at making dead code! How does one render it undead?


Solution

  • startswith can take a tuple of strings to match, so you can do this:

    [line.strip().split() for line in z if not line.startswith(('a', 'b'))]
    

    This will work even if a and b are words or sentences not just characters. If there can be cases where lines don't start with a or b but also don't end with c you can extend the list comprehension to this:

    [
        line.strip().split()
        for line in z if line.endswith('c') and not line.startswith(('a', 'b'))
    ]