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

时间:2015-01-30 03:49:44

标签: python list parsing for-loop

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

文本文件如下所示:

(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的新手,所以任何帮助/建议都将不胜感激。

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您可以使用布尔变量来记住何时应该记录用户名以及何时不应该记录用户名。

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.next'。循环将负责调用'next'。如果要跳到循环的下一次迭代,请使用'continue'语句。

答案 2 :(得分:-1)

您可以使用拆分线拆分所有行

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