我有一个包含以下内容的文本文件
steve:789852:1
sean:1234:1
我想读取文件,并且用户输入的内容与名字匹配,然后打印出中间的数字。 我可以只执行一行,而不能继续进行此操作
IndexError: list index out of range
我尝试了for循环和while循环。我正在使用的代码如下。请帮忙
x = 0
username = input('enter user name ')
file = open('user_details.txt', 'r')
count = len(open('user_details.txt').readlines())
while x < count:
print(x)
userFile = file.read().split('\n')[x]
userArray = userFile.split(':')
if (userArray[0] == username):
print('password = '+userArray[1])
x = x+1
答案 0 :(得分:3)
循环索引变量,而只需使用for循环即可。一个好的经验法则是,当您知道将要进行多少次迭代时使用for循环,而当您不知道将要进行迭代时则使用它。
username = input('enter user name ')
with open('user_details.txt', 'r') as f:
for line in f:
userArray = line.strip().split(':')
if (userArray[0] == username):
print('password = '+userArray[1])
请注意,该文件仅打开一次,并且也可以使用with
块正确关闭。还会仅对文件本身的行进行一次迭代。
代码的关键问题是,在while循环的第一次迭代之后,您将文件耗尽。
目的是读取文件的每一行,但是您要做的是计数文件的行并循环多次,然后在每个迭代中读取整个文件。在两次迭代之间不会重新打开该文件,因此,第一次while循环迭代该文件直到结束为止。当您在while的第二次迭代中再次出现时,没有什么要读取,因此您尝试获取该空列表的1索引,因此出现索引错误。
它偶然地适用于第一个,因为所有行的列表中都有第0个元素。
答案 1 :(得分:0)
readlines()
将文件指针移到文件末尾。因此,当您尝试使用相同的文件引用再次读取文件时,将返回一个空字符串。将内容读入变量并在循环中对其进行迭代。
答案 2 :(得分:0)
可以使用
for line in file.readlines():
... do stuff ...
或使用
lines = file.read().split('\n')
for line in lines:
... do stuff ...