12

我有这样的文件格式:

9 8 1
3 4 1
...
...

现在,我想将每一行作为三个整数。

当我使用

for line in f.readlines():
    print line.split(" ")

脚本打印了这个:

['9', '8', '1\r\n']
['3', '4', '1\r\n']
...
...

如何将每一行作为三个整数?

4

5 回答 5

18

使用您拥有的代码并解决如何将列表转换为整数的具体问题:

您可以遍历每一行并将字符串转换为int使用列表理解的以下示例:

鉴于:

line =['3', '4', '1\r\n']

然后:

int_list = [int(i) for i in line]

将产生一个整数列表

[3, 4, 1]

然后您可以通过下标(0 到 2)访问。例如

int_list[0]包含3,

int_list[1]包含4,

等等


一个更精简的版本供您考虑:

with open('data.txt') as f:
    for line in f:
        int_list = [int(i) for i in line.split()]
        print int_list

使用的好处with是,它会在您完成或遇到异常时自动为您关闭文件。

更新

根据您在下面的评论,如果您想要 3 个不同变量中的数字,例如abc您可以执行以下操作:

   for line in f:
       a, b, c = [int(i) for i in line.split()]
       print 'a = %d, b = %d, c = %d\n' %(a, b, c)

得到这个:

    a = 9, b = 8, c = 1

这取决于每行有 3 个数字。

在旁边:

请注意,您还可以使用以下形式的“生成器表达式”(GE)代替“列表理解”(LC):

    a, b, c = (int(i) for i in line.split())

对于您使用 3 个整数的特殊问题,这并没有太大的区别,但为了完整性,我将其展示出来。对于较大的问题,LC需要更多的内存,因为它会一次在内存中生成一个完整的列表,而GE则根据需要一个一个地生成一个值。如果您好奇,这个 SO 问题Generator Expressions vs. List Comprehension将为您提供更多信息。

于 2012-07-06T00:56:26.950 回答
4
with open("myfile.txt") as f:
    for line in f:
        int_list = [int(x) for x in line.split()]

你没有说你想对整数列表做什么,可能有更好的方法来迭代它们,这取决于。

如果您“需要将值作为三个不同的变量”,那么“

a, b, c = int_list

虽然你也可以使用:

int_list[0]
int_list[1]
int_list[2]

如预期的。

于 2012-07-06T00:59:46.060 回答
1
line.strip().split(" ") 

会做。

更完整,所有行在一个大字符串中仍然完好无损:

data = f.read().strip()    # loose final \n
[ int(x.split(" ")) for x in data.split('\n')]

会给你一个列表,其中包含你想要的每一行的答案。

于 2012-07-06T00:59:12.480 回答
0

这段代码应该可以解决您的问题:

f = open(filepath)
for line in f:
    intList = map(int, line.strip().split())
    print intList
f.close()
于 2012-07-06T01:01:25.550 回答
0

如果您想将整数存储在三个变量中:

with open('data1.txt') as f:
    for line in f:
        a,b,c=(int(x) for x in line.split()) 
        print a,b,c 

输出:

9 8 1
3 4 1
于 2012-07-06T01:16:07.077 回答