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问题生成器表达式与列表理解将为您提供更多信息.