我有这样的文件格式:
9 8 1
3 4 1
...
...
现在,我想将每一行作为三个整数。
当我使用
for line in f.readlines():
print line.split(" ")
脚本打印了这个:
['9', '8', '1\r\n']
['3', '4', '1\r\n']
...
...
如何将每一行作为三个整数?
使用您拥有的代码并解决如何将列表转换为整数的具体问题:
您可以遍历每一行并将字符串转换为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 个不同变量中的数字,例如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)
得到这个:
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将为您提供更多信息。
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]
如预期的。
line.strip().split(" ")
会做。
更完整,所有行在一个大字符串中仍然完好无损:
data = f.read().strip() # loose final \n
[ int(x.split(" ")) for x in data.split('\n')]
会给你一个列表,其中包含你想要的每一行的答案。
这段代码应该可以解决您的问题:
f = open(filepath)
for line in f:
intList = map(int, line.strip().split())
print intList
f.close()
如果您想将整数存储在三个变量中:
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