希望这将是我今天的最后一个问题:)
我有一个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,而不是像它正在做的那样错误地循环回来?
我真的只需要知道如何让上面的代码正确循环,而不是因为其他因素而尝试不同的方式。谢谢!
答案 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
的值,因此只要当前输入不包含名称,您就会看到重复的名称。