Skip to content Skip to sidebar Skip to footer

Python Split File Into List

I'm having trouble with the function below. It seems to split the file fine but then only returns it as one element Function: def splitRoute(): route = [] for line in open('ro

Solution 1:

Why are you replacing newlines? Just split the string:

def splitRoute():
  route = []

  for line in open('route.txt', 'r'):
    route.append(line.strip().split('>')) 

  return route

Solution 2:

split creates a list. Then you append that list to another (empty) list. So the result is that you get a list inside a list. If you had more lines, you'd get a longer list of lists. Here's a quick breakdown of the code:

def splitRoute():
  route = []

You create an empty list...

for line inopen("route.txt","r").readlines():
    line = line.replace("\r","")
    line = line.replace("\n","")

For every line, you replace \r and \n characters with empty strings. Note that you could do this more easily using line.strip() ('apple\n\r'.strip() -> 'apple'). Also, you should save the file to a filename so you can close it later. Finally, you don't need to use readlines here -- just iterate over the file directly.

line = string.split(line, '>')

Now you take the string that line refers to, split it into a list, and assign the list to line. Now line looks like this: ['B', 'F'].

    route.append(line) 
    return route

Now you've appended line to route, and route looks like this: [['B', 'F']].

If your goal is to create a single list, use extend instead of append.

def splitRoute():
  route = []
  f = open('route.txt', 'r')
  for line in f:
    route.extend(line.strip().split('>'))
  f.close()
  return route

Or, using with, and adopting a more readable indentation level:

def splitRoute():
    route = []
    withopen('route.txt', 'r') as f:
        for line in f:
            route.extend(line.strip().split('>'))
    return route

Output for a file with two lines ('B>F\nF>X\n'):

>>> splitRoute()
['B', 'F', 'F', 'X']

Post a Comment for "Python Split File Into List"