我想使用rfind()来查找str中的最高索引,但它返回最低索引

时间:2016-05-02 03:40:12

标签: python python-2.7 parsing find

所以我正在使用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()完全错误???

1 个答案:

答案 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()相同。