将文件转换为所需的输出

时间:2014-01-06 04:33:52

标签: python stdout stdin

输入:包含多行字符串的文件,每行是一个单独的字符串:

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。但这听起来很复杂,换行标签也让我感到困惑。

2 个答案:

答案 0 :(得分:1)

您可以使用rstrip删除换行符,然后split基于,删除字符串。接下来,您可以使用intmap函数将字符串转换为数字。

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(",")])
相关问题