我现在有个txt文件如下:
1 167 334555717
2 19 334555718
2 167 334555718
3 167 334555720
4 172 334555721
5 21 334555723
5 147 334555723
5 50 334555723
第一列是序号,第二列是字数,第三列是ID。相同ID的序号是相同的。然后现在我需要用python进行下述处理:
就是将相同id的字数相加得到一个总和sum,然后对sum进行如下的公式计算:
result=字数1/sumlog(字数1/sum)+字数2/sumlog(字数2/sum)+......
按这个文件举例来说,就是比如334555718的这个id的result计算如下:
sum=19+167
result=19/sumlog(19/sum)+167/sumlog(167/sum)
33455723的这个id的result就是
sum=21+147+50
result=21/sumlog(21/sum)+147/sumlog(147/sum)+50/sum*log(50/sum)
然后依次输出每个id的序号,id号跟result。
我的代码如下:
import math
f = open("F:\\net.txt")
lines = f.readlines()
rev_id=[]
for line in lines:
num = line.split()[0]
zishu = line.split()[2]
revid = line.split()[3]
sum = zishu
if revid in rev_id:
sum += zishu
result += zishu/sum*(math.log(zishu/sum))
rev_id.append(revid)
我的result的结果肯定不对,因为sum的值不是固定的全部总和。。请问该怎么做。
Berikut ialah kod Python3 untuk rujukan anda:
Arahan dan cadangan:
Python memang menggunakan fungsi
open
untuk membaca fail, tetapi jika anda membuka fail, anda mesti ingat untuk menutupnya untuk mengelakkan masalah Seperti dalam kod yang anda berikan, fail ituopen
tetapi tiadaclose
. Ini adalah cara penulisan yang kurang selamat Anda harus ingat: di mana sahaja adaopen
, ada jugaclose
, dan mereka berpasangan. Untuk mengelakkan kemungkinan terlupa untuk menutup fail, adalah sesuai untuk menggunakan pernyataanwith
.