Python 和 CSV:找到一行并给出列值

Fra*_*sio 4 python csv

它包括创建一个函数 def(,) 在 CSV 文件中搜索孩子的名字并给出他的年龄。

CSV 文件的结构如下:

Nicholas,12
Matthew,6
Lorna,12
Michael,8
Sebastian,8
Joseph,10
Ahmed,15 
Run Code Online (Sandbox Code Playgroud)

而我尝试的代码是这样的:

def fetchcolvalue(kids_agefile, kidname):

    import csv

    file = open(kids_agefile, 'r')
    ct = 0

    for row in csv.reader(file):
        while True:
            print(row[0])
            if row[ct] == kidname:
                break
Run Code Online (Sandbox Code Playgroud)

令人沮丧的是,它没有给我任何错误,而是一个无限循环:我认为这就是我做错的地方。

到目前为止,我从书中学到的只是循环(whilefor)和 if-elif-else 循环,除了 CSV 和文件基本操作操作之外,所以我真的不知道如何仅用这些来解决问题工具。

请注意,该函数必须使用通用的 2 列 CSV 文件,而不仅仅是孩子的文件。

Jea*_*bre 6

while True在循环将会使你永远循环下去(不变量是内循环改变)。只需删除它:

for row in csv.reader(file):
    if row[ct] == kidname:
        break
else:
   print("{} not found".format(kidname))
Run Code Online (Sandbox Code Playgroud)

对 csv 文件进行迭代,一旦row[ct]equals Kidname 就会中断。

我会添加一个else语句,以便您知道文件是否已被完全扫描而没有找到孩子的名字(只是为了暴露一些鲜为人知的elseafterfor循环用法:如果没有break遇到,则进入else分支。)

编辑:您可以在一行中使用any和生成器理解来完成:

any(kidname == row[ct] for row in csv.reader(file))
Run Code Online (Sandbox Code Playgroud)

True如果任何第一个单元格匹配,将返回,也可能更快。