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 

Я пытаюсь использовать 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, он утверждал, что его использование в точности похоже на find(), за исключением того, что он возвращает самый высокий индекс str. В моем случае это не так, оно просто подействовало как find() и вернуло самый низкий индекс.

Единственное, что я подумал о следующем, - это то, что оно теперь устарело, поскольку документы Python2.7 упоминают, что некоторые из этих методов на этой странице устарели.

Я не знаю. Кто-нибудь получил какой-то вклад? Или я просто становлюсь noob и получаю rfind() совершенно неправильно ???

+4

Он возвращает индекс символа _first_ самого правильного совпадения. Вы, вероятно, путаете, думая, что он вернет индекс символа _last_ матча (которого он не будет). – Selcuk

+0

Что он сказал. Кроме того, те _функции_ в модуле 'string' устарели, но эквивалентные' str.' * методы * ** не ** устарели. –

ответ

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(), то они одинаковы.

Смежные вопросы