【问题标题】:Python split file into listPython将文件拆分为列表
【发布时间】:2012-03-10 07:06:03
【问题描述】:

我在使用以下功能时遇到问题。似乎可以很好地拆分文件,但随后仅将其作为一个元素返回

功能:

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 行,所以只能到达所有七个元素?

【问题讨论】:

  • 好吧,你还期待什么?

标签: python list


【解决方案1】:

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

def splitRoute():
  route = []

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

  return route

【讨论】:

  • @Schmooo,它还会在每次使用 + 时创建一个新的列表副本。我建议使用extend 而不是append;那么你根本不必使用sum
  • 我刚刚意识到如果 route.txt 是多行的,这不起作用。它获取文件中的所有行并将其添加到列表中的一行。我需要将其拆分为 2d 列表,以便 2x3 用于三行文件。
【解决方案2】:

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 附加到routeroute 看起来像这样:[['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']

【讨论】:

  • 我是否需要列表中的列表才能使其成为二维数组,或者是否有一种方法可以仅使用一个列表来完成?
  • 如果你想要一个二维数组,使用append而不是extend。在 Python 中创建 2D 数组最直接的方法确实是创建列表列表。您还可以使用元组来索引字典; d = {}; d[0, 0] = 1; d[0, 1] = 0; d[1, 0] = 1; d[1, 1] = 0 等等。但在大多数情况下,这比列表列表要慢一些。
猜你喜欢
  • 2018-08-25
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-06
  • 2015-07-10
  • 1970-01-01
相关资源
最近更新 更多