我在使用下面的功能时遇到问题。它似乎将文件分割得很好,但之后只将它作为一个元素返回
功能:
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行?
答案 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']