2015-03-04 2 views
0

В им скрипт работает на меня сделать следующее:«==» не делать то, что я думаю, что он должен делать в Python

data["serial"] = md5.new(json.dumps(data["data"])).hexdigest() 
... 
... 
lst = serialFile.readlines() 
    if(len(lst) > 0): 
     lastLine = lst[len(lst) - 1]  
... 
... 
print "lLn : " , lastLine 
print "md5 : " , str(data["serial"]) 
if lastLine == data["serial"]: 

Я могу подтвердить, что, когда я распечатать LLN и md5 они одинаковы , Я чувствую, что я должен быть расцепления логическое утверждение ... но я не ...

Также я попытался с помощью:

if lastLine == str(data["serial"]): 

Я все еще довольно новый для Python ... Что я отсутствует здесь?

+2

Возможно есть символ новой строки в конце 'lastLine'. Попробуйте напечатать 'repr (lastLine)' и 'repr (data [" serial "])'. – BrenBarn

+0

LLN: e1a9502f3fcd6ec352bb10a1fd8153dd md5: 'e1a9502f3fcd6ec352bb10a1fd8153dd' – Deslyxia

ответ

0

Предполагая, что readlines() выполнен с открытым файловым дескриптором, он будет считывать весь поток в список строк с линиями, включая символы возврата каретки и символ новой строки. Вы хотите вызвать rstrip() на линии, чтобы удалить все символы новой строки и символов возврата каретки, которые могут присутствовать. Если у вас также есть другие символы пробелов в конце, которые вы хотите удалить, вы должны вместо этого позвонить rstrip('\r\n').

Еще один намек: вам не нужно найти длину списка, чтобы получить последний элемент, вы можете просто сделать lst[-1] в вашем случае.

Собираем все вместе, вы могли бы сделать что-то вроде

lst = serialFile.readlines() 
    if(len(lst) > 0): 
     lastLine = lst[-1].rstrip('\r\n') 
+0

Platform lineseparators (включая '\ г \ n') переводятся в' \ n', вам нужно только раздеться, что один символ. –

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