Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 循环订单问题_Python_Loops - Fatal编程技术网

Python 循环订单问题

Python 循环订单问题,python,loops,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(

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

我有一个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
这是有效的,除了每次我碰到一行没有名字的行时,它会通过循环返回,无法正确打印。例如,文件中的“我的名字”记录包括:

约翰·蒂姆·罗布·洛里·梅尔无唱片无唱片卡莉·特雷弗

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

约翰·蒂姆·罗布·洛里·梅尔·梅尔·梅尔·梅尔·梅尔·梅尔·凯莉·特雷弗

如何更正上面的代码,使其在没有名字的情况下遍历行并打印none,而不是像现在这样错误地循环


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

您应该用做作的方式替换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
解释 在代码中,如果没有找到名字,则在离开else块后打印“None”。正当但是,解释器点击了打印结果行,但对他来说,最后找到的结果是前一行的结果,所以它重复了前一行的结果,在你的例子中是Mel


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

您应该用矫揉造作的方式替换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
解释 在代码中,如果没有找到名字,则在离开else块后打印“None”。正当但是,解释器点击了打印结果行,但对他来说,最后找到的结果是前一行的结果,所以它重复了前一行的结果,在你的例子中是Mel


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

每次循环重复时,都会执行打印结果。由于只更改if子句中结果的值,因此只要当前输入不包含名称,就会看到名称重复。

每次循环重复时都会执行打印结果。由于只更改if子句中results的值,因此只要当前输入不包含名称,就会看到名称重复出现。

我建议使用调试器逐步检查代码。您将看到每次循环迭代时都会执行打印结果。这解释了您看到的行为。它看起来只是一个循环顺序问题,因为您打印结果,即使它没有被设置,但它找不到任何东西。打印结果应在结果=匹配之后。。。if的第一个子句中的语句。这不是基于你之前的问题吗。。。如果这个问题解决了,你就可以把上面的内容转换成字典,如果名字不符合字典的要求,你就不能这样做吗?在我看到他编辑字典之前,我用了最后一个问题的答案。我的时间有点紧,不过我也会看看。现在,我已按正确顺序获得了所需的所有数据:我建议使用调试器逐步检查代码。您将看到每次循环迭代时都会执行打印结果。这解释了您看到的行为。它看起来只是一个循环顺序问题,因为您打印结果,即使它没有被设置,但它找不到任何东西。打印结果应在结果=匹配之后。。。if的第一个子句中的语句。这不是基于你之前的问题吗。。。如果这个问题解决了,你就可以把上面的内容转换成字典,如果名字不符合字典的要求,你就不能这样做吗?在我看到他编辑字典之前,我用了最后一个问题的答案。我的时间有点紧,不过我也会看看。现在,我已按正确顺序获得了所需的所有数据: