2016-05-02 49 views
0

所以我正在通過Python中的一個腳本工作,打開一個包含電子郵件標題的文件,我正在解析find()一個特定的設置我想用來稍後執行一些數學函數的浮點數。我想使用rfind()找到一個str中的最高索引,但它返回最低索引

這裏是我的代碼只是爲了好玩:

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文檔提到該頁面上的某些方法已被棄用。

我不知道。有人有任何意見?或者我只是作爲一個noob,讓rfind()完全錯誤?

+4

它返回最右邊匹配的_first_字符的索引。您可能會覺得困惑,認爲它會返回匹配_last_字符的索引(它不會)。 – Selcuk

+0

他說什麼。另外,'string'模塊中的那些_functions_不推薦使用,但等效的'str.' *方法*不推薦使用**。 –

回答

1

我想你想從行X-DSPAM-Confidence: 0.84725提取0.84725作爲一個例子。如果是這樣,你應該用

rnum = line[linePos+len('X-DSPAM-Confidence: '):linePos+len('X-DSPAM-Confidence: ')+7] 

更換

rnum = line[linePos + 1: (linePos + 1)+7] 

find()rfind()分別返回最左邊或最右邊出現的第一個字母的位置。所以你應該修復索引。然後,如果該行包含一個出現,find()rfind()是相同的。

相關問題