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

时间:2012-07-06 00:55:21

标签: python file-io casting

我的文件格式如下:

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

现在,我想让每一行成为三个整数。

当我使用

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

脚本打印了这个:

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

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

5 个答案:

答案 0 :(得分:15)

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

您可以使用list comprehension使用以下示例遍历每一行并将字符串转换为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个数字。

除了:

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

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

对于3个整数的特定问题,这没有太大区别,但我表示它是完整的。对于较大的问题,LC需要更多内存,因为它会立即在内存中生成完整列表,而GE会根据需要逐个生成值。如果您感到好奇,这个问题Generator Expressions vs. List Comprehension会为您提供更多信息。

答案 1 :(得分:3)

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]

根据需要。

答案 2 :(得分:1)

line.strip().split(" ") 

会做的。

更完整,所有行仍在一个大字符串中保持完整:

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

会为您提供一个包含每行所需答案的列表。

答案 3 :(得分:0)

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

f = open(filepath)
for line in f:
    intList = map(int, line.strip().split())
    print intList
f.close()

答案 4 :(得分: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