[英]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
令人沮喪的是,它不會給我任何錯誤,而是一個無限循環:我認為這就是我做錯了。
到目前為止,我從本書中學到的只是循環( while和for )以及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.