Search code examples
pythonlistfilereadfile

Python 3, Read textfile and separate each line and fill in corresponding variables


Firstly I use this:

with open(filename) as fp:
    for i, line in enumerate(fp):    
        print(i)
        print(line)
        if i == index:
            break
        else:
            continue

This makes me able to output each line until ( i ) reaches the amount of the index variable, but this is not all I want, I want to read a file which looks a bit like this :

John|Graham|JOB|AGE
Philip|Jefferson|JOB|AGE

I want to be able to parse this data into corresponding variables, but! I want to be able to specify which line to read from, so that I can read line 1, parse the data from there, and then line 2, but not as in a loop!, which is the important part.

I want to be able to set the variable ( index ) to let's say 2

then line 2 will parse the first segment "Philip" into the variable NAME.

and so on.

I hope you understand!, I have been so frustrated that I have not been able to come up with a solution.


Solution

  • Here's something that should work:

    first we need to get all the lines read into a list.

    >>> with open('in.txt', 'r') as f:
    >>>     lines = f.read().splitlines()
    

    now we can index nicely in:

    >>> print(lines[0])
        John|Graham|JOB|AGE
    

    Okay, now we want to split each line into the data we need.

    >>> first = lines[0]
    >>> info = first.split('|')
        ['John', 'Graham', 'JOB', 'AGE']
    

    And then to put everything into a variable:

    >>> NAME, LASTNAME, JOB, AGE = info
    >>> print(NAME)
        John
    >>> print(LASTNAME)
        Graham
    

    Putting it all together:

    with open('in.txt', 'r') as f:
        lines = f.read().splitlines()
    
    def get_info(lines, line_num):
        line = lines[line_num]
        return line.split('|')
    
    NAME, LASTNAME, JOB, AGE = get_info(lines, 0)
    print(NAME) # Prints "John"
    

    If you don't want to read in the whole file at once, you can use the same techniques in your script:

    with open(filename) as fp:
        for i, line in enumerate(fp):    
            print(i)
            print(line)
            if i == index:
                NAME, LASTNAME, JOB, AGE = line.split('|')
                break