split()出错

2024-04-29 03:23:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文本文件“luawrite”,我把每一行分成4列,然后用第4列的值除以(第3列的值乘以8)。文件luawrite如下所示:

0.012281001     00:1c:c4:c2:1f:fe       1441    44000000
0.012285001     00:1c:c4:c2:1f:fe       1441    44000000
0.012288001     00:1c:c4:c2:1f:fe       1441    44000000
0.012292001     00:1c:c4:c2:1f:fe       1441    44000000
0.012295001     00:1c:c4:c2:1f:fe       1441    44000000
0.012299001     00:1c:c4:c2:1f:fe       1441    44000000
0.012302001     00:1c:c4:c2:1f:fe       1441    44000000

我为此编写的代码如下:

#!/usr/bin/python

import collections
result = collections.defaultdict(int)

with open("luawrite", "r") as f:
    for line in f:
            hashes = line.split()
            val1 = int(hashes[2])
            val2 = int(hashes[3])
            k = (val1*8)/val2
            print k  

我正在使用Python2.6。但我得到的解都是零。这个代码的问题在哪里,请告诉我。这可能是个小错误,但我找不到。谢谢!你知道吗


Tags: 文件代码binusrlinecollectionsint文本文件
1条回答
网友
1楼 · 发布于 2024-04-29 03:23:13

在py2.x中,整数除法截断输出,因此您将在此处获得0作为输出:

使用float

k = (val1*8)/float(val2) #or just do: (val1*8.0)/val2   #numerator is now a float

演示:

>>> 2/3
0
>>> 2/3.0
0.6666666666666666

>>> 2/float(3)
0.6666666666666666

因此,必须至少有一个操作数是float才能获得正确的输出。你知道吗

您还可以在py2.x中导入py3.x除法运算符的功能:

>>> from __future__ import division
>>> 2/3
0.6666666666666666

另一种选择是operator.truediv

>>> import operator
>>> operator.truediv(2,3)
0.6666666666666666

相关问题 更多 >