所以我正在使用Python中的一个脚本来打开一个包含电子邮件标题的文件,我正在解析它以查找()一组特定的浮点数,我想用它们来执行某些数学函数。
这是我的代码,只是为了好玩:
fname = raw_input("What is the file name? ")
fhand = open(fname)
total = 0
count = 0
for line in fhand:
line = line.rstrip()
linePos = line.rfind('X-DSPAM-Confidence: ')
if linePos >= 0:
rnum = line[linePos + 1: (linePos + 1)+7]
print rnum
#total += float(rnum)
#count += 1
elif linePos == -1:
continue
#avg = total/count
#print "Average spam confidence: " + avg
我正在尝试使用rfind()来获取我正在搜索的str中的最高索引,以便从正在读取的行中切片[]我想要的浮点数。
我出去测试打印我跑去看看我的rfind()给我的位置是这样的:
What is the file name? mbox-short.txt
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
-DSPAM-
我对解决它的任何帮助都不感兴趣,因为我已经可以使用find()方法完成它,只需根据需要调整我的索引以获取我需要使用的float()数据。
我的问题更多是关于rfind()本身以及我是否正确使用它和/或在文档中遗漏了有关其使用的内容。当我阅读Python2.7文档时,它声明它的用法与find()完全相同,只是它返回str的最高索引。在我的情况下,它没有,它只是像find()一样,并返回最低的索引。
我接下来想到的另一件事是它现在是否已被弃用,因为Python2.7文档提到该页面上的某些方法已被弃用。
我不知道。有人有任何意见吗?或者我只是一个菜鸟并让rfind()完全错误???
答案 0 :(得分:1)
我想你想从行0.84725
中提取X-DSPAM-Confidence: 0.84725
作为例子。如果是这样,你应该替换
rnum = line[linePos + 1: (linePos + 1)+7]
与
rnum = line[linePos+len('X-DSPAM-Confidence: '):linePos+len('X-DSPAM-Confidence: ')+7]
。 find()
和rfind()
分别返回最左侧或最右侧出现的第一个字母的位置。所以你应该修复索引。然后,如果该行包含一个find()
,rfind()
相同。