簡體   English   中英

Python和CSV:找到一行並給出列值

[英]Python and CSV: find a row and give column value

它包括創建一個函數def(,),它在CSV文件中搜索孩子的名字並給出他的年齡。

CSV文件的結構如下:

Nicholas,12
Matthew,6
Lorna,12
Michael,8
Sebastian,8
Joseph,10
Ahmed,15 

雖然我嘗試的代碼是這樣的:

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

令人沮喪的是,它不會給我任何錯誤,而是一個無限循環:我認為這就是我做錯了。

到目前為止,我從本書中學到的只是循環( whilefor )以及if-elif-else循環,除了CSV和文件基本操作操作之外,所以我無法弄清楚如何只用那些解決問題工具。

請注意,該功能必須使用通用的2列CSV文件,而不僅僅是孩子們的文件。

循環中的while True將使您永遠循環(循環中沒有變量)。 只需刪除它:

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

迭代csv文件,一旦row[ct]等於kidname,它就會中斷。

我會添加一個else語句,以便您知道文件是否已經完全掃描而沒有找到孩子的名字(只是為了在for循環之后暴露一些鮮為人知的else用法:如果沒有遇到break ,則進入else分支。)

編輯:您可以使用any和生成器理解在一行中完成:

any(kidname == row[ct] for row in csv.reader(file))

如果任何第一個單元格匹配,則返回True ,也可能更快。

這應該可行,在您的示例中,for循環將row設置為文件的第一行,然后啟動while循環。 while循環永遠不會更新row因此它是無限的。 只需刪除while循環:

def fetchcolvalue(kids_agefile, kidname):

    import csv

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

    for row in csv.reader(file):
        if row[ct] == kidname:
            print(row[1])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM