我的文件格式如下:
9 8 1
3 4 1
...
...
现在,我想让每一行成为三个整数。
当我使用
时for line in f.readlines():
print line.split(" ")
脚本打印了这个:
['9', '8', '1\r\n']
['3', '4', '1\r\n']
...
...
如何将每一行作为三个整数?
答案 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个不同变量中的数字,例如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个数字。
除了:
请注意,除了“列表理解”(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