python读取文件,打印以特定字符串开头的行的一部分

时间:2018-07-09 23:37:57

标签: python

我有一个包含以下内容的文本文件

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

3 个答案:

答案 0 :(得分:3)

python中通常不需要

循环索引变量,而只需使用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 ...