我能做些什么来通过列表添加
fh = open(fname)
for line in fh:
if line.startswith("X-DSPAM-Confidence:") : continue
# print(line)
count = 0
for line in fh:
if line.startswith("X-DSPAM-Confidence:"):
count = count + 1
# print(count)
for line in fh:
if line.startswith("X-DSPAM-Confidence:"):
# print(line)
xpos = line.find(' ')
# print(xpos)
num = line[xpos : ]
# print(float(num))
fnum = float(num)
# print(fnum)
total = 0
for i in fnum:
total += int(i)
print(total)错误:“浮点对象不能在第24行上迭代”.第24行是循环的第4行。
发布于 2020-08-04 11:43:08
首先,打开的文件只能迭代一次,您的代码显示了以for line in fh:开头的4个循环。在第一个循环之后,文件指针将到达文件的末尾,下面的循环应该立即返回。因此,应该优先考虑with。
接下来,在循环的某个地方,您将在fnum中得到一个浮点值。只需在启动循环之前初始化total,并在得到它时添加fnum:
total = 0
with open(fname) as fh:
for line in fh:
if line.startswith("X-DSPAM-Confidence:"):
# print(line)
xpos = line.find(' ')
# print(xpos)
num = line[xpos : ]
# print(float(num))
fnum = float(num)
# print(fnum)
total += fnum
# print(total)with确保在循环结束时文件将被干净地关闭。
发布于 2020-08-04 11:41:30
fnum是一个浮子。它不是数组,因此它是不可迭代的,不能在for循环中迭代。
您可能不需要数组来确定总数和平均值:
fname = "c:\\mbox-short.txt"
fh = open(fname)
count = 0
total = 0
for line in fh:
if line.startswith("X-DSPAM-Confidence:"):
xpos = line.find(' ')
num = line[xpos : ]
fnum = float(num)
total += fnum
count += 1
print("Total = " + str(total))
print("Average = " + str(total / count))
print("Number of items = " + str(count))发布于 2020-08-04 12:58:25
在这种情况下,您不必使用startsWith。最好对文件的每一行使用拆分。每一行都会将所有单词分割成一个列表。然后使用您查找的索引,X-DSPAM-Confidence:.如果存在,则取相应的利息值。在这种情况下,它是索引1。下面是代码:
total = 0
number_of_items = 0
with open("dat.txt", 'r') as f:
for line in f:
fields = line.split()
if fields != []:
if fields[0] == "X-DSPAM-Confidence:":
number_of_items += 1
total += float(fields[1])
print(total)
print(number_of_items)
avg = (total/number_of_items)
print(avg)我用文本文件名"dat.txt“保存了您的数据。
希望能帮上忙!
https://stackoverflow.com/questions/63245667
复制相似问题