从csv文件获取值时收到KeyError

2024-09-28 20:17:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个目录中的多个csv文件中检索值。执行if row['opponent-points-per-game-rank'] == 6:时,我收到一个密钥错误。当我做以下事情时:

if 'opponent-points-per-game-rank' in myfilereader.fieldnames:
    testrank = [row.get('opponent-points-per-game-rank') for row in myfilereader]

它将找到列名。为什么它可以通过这种方式找到列名而不能通过另一种方式找到?这是我的csv文件的link。我现在的代码:

import os
import csv

testrank = []

 
directory = os.path.join("c:\\","Users\sm\OneDrive\TestProject") 

for root,dirs,files in os.walk(directory):
    for file in files:
       if file.endswith(".csv"):
           f=open(file, 'r')
           myfilereader = csv.DictReader(f)
           for row in myfilereader:
               if row['opponent-points-per-game-rank'] == 6:
                  testrank.append(row['Team'])
           f.close() 

print(testrank)

Tags: 文件csvingameforifospoints
2条回答

我认为row是一个OrderedDict对象。这是我的解决办法。注意,您需要将v强制转换为int,因为它是str

import os
import csv

testrank = []

 
directory = os.path.join("c:\\","Users\sm\OneDrive\TestProject") 

for root,dirs,files in os.walk(directory):
    for file in files:
       if file.endswith(".csv"):
           f=open(file, 'r')
           myfilereader = csv.DictReader(f)
           for row in myfilereader:
               for k,v in row.items():
               if k == 'opponent-points-per-game-rank' and int(v) == 6:
                  testrank.append(row['Team'])
           f.close() 

print(testrank)

我尝试使用您链接的文件复制此问题,但没有收到任何错误。但是row['opponent-points-per-game-rank']的值是一个字符串,因此row['opponent-points-per-game-rank'] == 6的计算结果总是False。当这个条件被int(row['opponent-points-per-game-rank']) == 6所取代时,一切似乎都正常

相关问题 更多 >