Python将文件拆分成列表

时间:2012-02-19 19:57:30

标签: python list

我在使用下面的功能时遇到问题。它似乎将文件分割得很好,但之后只将它作为一个元素返回

功能:

def splitRoute():
  route = []
  for line in open("route.txt","r").readlines():
    line = line.replace("\r","")
    line = line.replace("\n","")
    line = string.split(line, '>')
    route.append(line) 
  return route

输出:

[['B', 'F']]

route.txt内容:

B>F

它只返回一个元素,因为文件中只有一行吗? 我有另一个功能,将另一个文件拆分为一个7x7列表,工作正常,但是只有7个行,因为它有7行?

2 个答案:

答案 0 :(得分:3)

为什么要更换换行符?只需拆分字符串:

def splitRoute():
  route = []

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

  return route

答案 1 :(得分:1)

split创建一个列表。然后你append列出另一个(空)列表。结果就是你在列表中得到一个列表。如果您有更多行,您将获得更长的列表列表。以下是代码的快速细分:

def splitRoute():
  route = []

您创建一个空列表...

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

对于每一行,用空字符串替换\ r和\ n字符。请注意,您可以使用line.strip()'apple\n\r'.strip() - > 'apple')更轻松地完成此操作。此外,您应该将文件保存为文件名,以便稍后关闭它。最后,您不需要在此处使用readlines - 只需直接遍历文件。

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

现在,您获取line引用的字符串,将其拆分为一个列表,并将列表分配给line。现在line看起来像这样:['B', 'F']

    route.append(line) 
    return route

现在您已将line附加到route,而route看起来像这样:[['B', 'F']]

如果您的目标是创建单个列表,请使用extend代替append

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

或者,使用with,并采用更具可读性的缩进级别:

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

包含两行('B>F\nF>X\n')的文件的输出:

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