解析文本文件中跟在静态行之后的一行

Parsing a line in a text file that follows a static line

我是 python 的新手,所以任何 comments/suggestions 都非常感谢。我试图从一个文本文件中提取用户名和角色并将它们存储到一个列表中,以便我可以将它们写入一个单独的文件。用户名是动态的,所以如果该行每次都以 id "admin" 开头,我不能简单地开始解析。用户名每次都不在同一行,因为之前有各种文本行,所以我首先搜索以 USERNAME 开头的唯一静态行,并且知道用户名在下一行,直到空白 ( ) 行。

文本文件如下所示:

(Dynamic lines of text..)

USERNAME    ROLE

user345    user

admin31414   admin

user113131   user

user34342   user

admin585   admin

user333   user

user599       user                                                           

我遇到问题的地方是如果初始行以 "username" 开头,则弄清楚如何在解析文件时跳到下一行。我使用 file.next() 但它只是跳到 for 循环中的下一行(不再是静态的)并且 IF 语句失败。我目前的循环代码如下:

for line in file:
    if line.startswith('USERNAME'):
        file.next()

正如我之前所说,我是 python 的新手,所以任何 help/suggestions 都将不胜感激。

你可以使用分割线来分割所有的线

with open(r"user.txt", "r") as f:
    lines = f.read().splitlines()
    for eachLine in lines:
        if eachLine.startswith('USERNAME'):
            pass

可能最简单的事情就是在再次循环之前执行测试,例如:

found_username = False
for line in file:
    if found_username:
        # process line here
    if line.startswith('USERNAME'):
        found_username = True

您可以使用布尔变量来记住什么时候应该记录用户名,什么时候不应该。

record = False
for line in file:
    if line.startswith('--END--'):  # so you don't catch any extra lines
        break  # this exits the loop
    if record:
        print line  # or whatever code you want to run on each username
    if line.startswith('USERNAME'):
        record = True  # this will be visible in the next loop iteration

当您已经在 'file' 上循环时,您不应该调用 'file.next'。循环将负责调用 'next'。如果要跳到循环的下一次迭代,请使用 'continue' 语句。