在Python中读取包含文件整数的行?

sez*_*ina 9 python file-io casting

我有这样的文件格式:

9 8 1
3 4 1
...
...
Run Code Online (Sandbox Code Playgroud)

现在,我希望将每一行作为三个整数.

我用的时候

for line in f.readlines():
    print line.split(" ")
Run Code Online (Sandbox Code Playgroud)

脚本打印了这个:

['9', '8', '1\r\n']
['3', '4', '1\r\n']
...
...
Run Code Online (Sandbox Code Playgroud)

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

Lev*_*von 16

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

您可以int使用list comprehension遍历每一行并将字符串转换为以下示例:

鉴于:

line =['3', '4', '1\r\n']
Run Code Online (Sandbox Code Playgroud)

然后:

int_list = [int(i) for i in line]
Run Code Online (Sandbox Code Playgroud)

将产生一个整数列表

[3, 4, 1]
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过下标(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
Run Code Online (Sandbox Code Playgroud)

使用的优点with是,当您完成或遇到异常时,它会自动为您关闭文件.

更新:

根据您在下面的意见,如果你想在3个不同的变量,比如数字a,b并且c,你可以做到以下几点:

   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)
Run Code Online (Sandbox Code Playgroud)

得到这个:

    a = 9, b = 8, c = 1
Run Code Online (Sandbox Code Playgroud)

这依赖于每行有3个数字.

在旁边:

请注意,除了"列表理解"(LC),您还可以使用此表单的"生成器表达式"(GE):

    a, b, c = (int(i) for i in line.split())
Run Code Online (Sandbox Code Playgroud)

对于你的3个整数的特殊问题,这并没有多大区别,但我表示它是完整的.对于较大的问题,LC需要更多内存,因为它会立即在内存中生成完整列表,而GE会根据需要逐个生成值.如果您感到好奇,这个SO问题生成器表达式与列表理解将为您提供更多信息.