循环订单问题

时间:2013-08-25 21:28:07

标签: python loops

希望这将是我今天的最后一个问题:)

我有一个csv文件,其中有很多行包含数据,如:

{"first_name":"John","last_name":"Smith","age":30}
{"first_name":"Tim","last_name":"Johnson","age":34}

我正在使用此代码从文件中获取名字:

with open("c:\\newgood.csv", "r") as fo:
    for line in fo:
        match = re.search('first_name"(.*?)"(.*?)"', line)
        if match:
            results = match.group(2)
        else:
            print('None')
        print results

除非每次我没有使用first_name的线路,否则它会循环回来并且无法正确打印。我的名字记录例如在文件中:

  

John Tim Rob Lori Mel(没有记录)(没有记录)Carrie Trevor

当我使用上面的代码时,我得到:

  

John Tim Rob Lori Mel没有Mel没有Mel Carrie Trevor

如何更正上面的代码来遍历这些行,并且在没有first_name的地方打印none,而不是像它正在做的那样错误地循环回来?

我真的只需要知道如何让上面的代码正确循环,而不是因为其他因素而尝试不同的方式。谢谢!

2 个答案:

答案 0 :(得分:3)

您应该通过做法替换else中的print语句:

with open("c:\\newgood.csv", "r") as fo:
    for line in fo:
        match = re.search('first_name"(.*?)"(.*?)"', line)
        if match:
            results = match.group(2)
        else:
            results = 'None'
        print results

解释

使用您的代码,当找不到名字时,您将打印“无”并在您离开其他区块后。对。然后,解释者点击了print results行,但是对于他来说,找到的最后一个结果是前一行,所以它重复了之前的结果,在你的情况下是 Mel

因此,您需要在每个循环中更改结果,以确保只打印名字或“无”字符串。

答案 1 :(得分:1)

每次循环重复时都会执行

print results。由于您只更改results子句中if的值,因此只要当前输入不包含名称,您就会看到重复的名称。