您的直接问题与其他人提到的一样,您在数据末尾并不知道\n
。内置功能print
和repr
是你的朋友;使用它们:
if name != b:
print repr(name), repr(b)
因此问题的原因变得明显。
下面是一些(未经测试的)代码,说明在处理简单数据文件格式(如您的)时更好的实践。它的目的是应对空/空行,未终止的最后一行,像现实生活的可能性:
Jack 9
Jill 100
Billy Bob 99
Decimus 1.23
Numberless
没有崩溃或横行。
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
语句,它将在关闭文件后进行查看,因此只需删除该行即可.行。
也在studentname中。txt在名称和数字前没有### – gratholio
尝试打印'b',无论查看它是否真的如您所愿。此外,您可以尝试使用split,而不是使用子字符串语法,因为那样会更可靠(如果有的数字不是两位数字)。 –