Ваша непосредственная проблема заключается в том, что другие уже упоминали, что вы не знаете \n
в конце ваших данных. print
и встроенная функция repr
- ваши друзья; используйте их:
if name != b:
print repr(name), repr(b)
, после чего причина проблемы становится очевидной.
Вот некоторый (непроверенный) код, который иллюстрирует лучшую практику при работе с простыми форматами файлов данных, такими как ваш. Он предназначен для работы с пустыми / пустыми строками, неопределенной последней строкой и реальными возможностями, такими как:
Jack 9
Jill 100
Billy Bob 99
Decimus 1.23
Numberless
без сбоя или запуска amok.
with open('studentname.txt','rU') as f:
for line_number, line in enumerate(f, 1):
line = line.rstrip('\n')
fields = line.split()
nf = len(fields]
if nf == 0:
continue: # blank/empty line
if nf == 1:
print('Only 1 field in line', line_number, repr(line))
continue
dataname = ' '.join(fields[:-1])
try:
datanumber = int(fields[-1])
except ValueError:
print('Invalid number', repr(fields[-1]), 'in line',
line_number, repr(line))
continue
list1.append((dataname, datanumber))
if name == dataname:
print(repr(dataname), number)
Примечание file.close
оценивает объект метода / функции, который ничего не делает. Вам нужно назвать это: file.close()
. Однако теперь, когда вы используете оператор with
, он будет выглядеть после закрытия файла, поэтому просто удалите эту строку file.close
.