2016-05-02 2 views
0

私はPythonのスクリプトを通して、私が特定のセットを見つけるために解析しているメールヘッダを含むファイルを開く後でいくつかの数学関数を実行するために使用したい浮動小数点数を返します。私は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 

私はスライスするために私が探していstr内の最大インデックスを取得するために)(RFINDを使用しようとしています[]浮動小数点数Iは、読まれる行からしたい。

私のうち私はどこ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のドキュメントを読むと、strの最高のインデックスを返す点を除いて、find()と全く同じように使用されています。私の場合はそうではありませんでした。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()は、それぞれ左端または右端の最初の文字の位置を返します。インデックス作成を修正する必要があります。次に、行に1つのオカレンスが含まれている場合は、find()rfind()は同じです。

関連する問題