我有一个文本文件,其中包含800个单词,每个单词前面都有一个数字。 (每个单词及其编号都在一个新行中。这意味着文件有800行)我必须找到数字,然后将它们相乘。因为乘以很多浮点值等于零,我必须使用对数来防止下溢,但我不知道如何。 这是公式: cNB = argmaxlogP(c)+logP(x | c)
此代码不会打印任何内容。
output = []
with open('c:/python34/probEjtema.txt', encoding="utf-8") as f:
w, h = map(int, f.readline().split())
tmp = []
for i, line in enumerate(f):
if i == h:
break
tmp.append(map(int, line.split()[:w]))
output.append(tmp)
print(output)
文件语言是波斯语。
该文件的片段:
فعالان0.0019398642095053346 محترم0.03200775945683802 اعتباري0.002909796314258002 مجموع0.0038797284190106693 حل0.016488845780795344 مشابه0.004849660523763337 مشاوران0.027158098933074686 مواد0.005819592628516004 معادل0.002909796314258002 ولي0.005819592628516004 ميزان0.026188166828322017 دبير0.0019398642095053346 دعوت0.007759456838021339 اميد0.002909796314258002
答案 0 :(得分:1)
如果我理解正确,你可以按照以下方式做点什么:
result = 1
with open('c:/python34/probEjtema.txt', encoding="utf-8") as f:
for line in f:
word, number = line.split() # line.split("\t") if numbers are seperated by tab
result = result * float(number)
答案 1 :(得分:1)
您可以使用http://openlayers.org/en/v3.5.0/apidoc/ol.geom.Circle.html查找每行中的第一个数字,例如
import re
output = []
with open('c:/python34/probEjtema.txt', encoding="utf-8") as f:
for line in f:
match = re.search(r'\d+.?\d*', line)
if match:
output.append(float(match.group()))
print(output)
re.search(r'\d+.?\d*', line)
查找第一个数字(每行中带.
的整数或浮点数。
这是一个不错的在线正则表达式测试器:regular expressions(用于调试/测试)。
/编辑:将正则表达式更改为\d+.?\d*
以捕获整数和浮点数。
答案 2 :(得分:1)
这将创建一个包含所有数字的输出列表。结果将给出最终的乘法结果。
import math
output = []
result=1
eres=0
with open('c:/python34/probEjtema.txt', encoding="utf-8") as f:
for line in (f):
output.append(line.split()[1])
result *= float((line.split()[1]))
eres += math.log10(float((line.split()[1]))) #result in log base 10
print(output)
print(result)
print eres