输入:包含多行字符串的文件,每行是一个单独的字符串:
1234,123,345
4567,56,76
1029,192,13
输出:列表列表,其中每一行是单独的列表
[[1234,123,345],[4567,56,76],[1029,192,13]]
通常我能够做到这些因为输入没有逗号并且只是间隔开,但是每一行都是一个字符串,所以它让我失望。
到目前为止,我有:
with open("file.txt") as f:
info = f.readlines()
solution = []
for line in info:
solution.append([line])
print solution
但这会产生:
[['1234,123,345\n'],['4567,56,76\n'],['1029,192,13\n']]
我有一个想法,我会做另一个for循环,获取每个字符,并将每个非逗号附加到另一个数组,然后转换为int。但这听起来很复杂,换行标签也让我感到困惑。
答案 0 :(得分:1)
您可以使用rstrip
删除换行符,然后split
基于,
删除字符串。接下来,您可以使用int
和map
函数将字符串转换为数字。
with open("file.txt") as f:
print [map(int, line.rstrip().split(",")) for line in f]
答案 1 :(得分:1)
我有一个想法,我会做另一个for循环,获取每个字符,并将每个非逗号附加到另一个数组,然后转换为int。但这听起来很复杂......
你是对的 - 会工作,但这不是最简单的方法。
在字符串上使用split
方法,如下所示:
for line in info:
solution.append(line.split(","))
现在,不是每一行都是['1234,123,345\n']
,而是['1234', '123', '345\n']
。
这会让你接近,但那些仍然是字符串,而不是整数。正如您的建议,将每个转换为int的内部循环将非常有效。但是在列表推导中使用for循环可能更容易阅读,而不是在for语句中。像这样:
for line in info:
solution.append([int(number) for number in line.split(",")])
如果你不理解这种理解,那么它就是一个声明:
for line in info:
numbers = []
for number in line.split(","):
numbers.append(int(number))
solution.append(numbers)
并且,由于int
函数可以忽略空格,int('345\n')
为345
,因此您无需执行任何其他操作。
但如果 必须做其他事情,rstrip
将是最简单的答案:它会删除字符串末尾的所有空格。所以:
for line in info:
solution.append([int(number) for number in line.rstrip().split(",")])