如何将CSV行分割,令row[0]为名称,其余项为元组?

3 投票
2 回答
8862 浏览
提问于 2025-04-17 02:09

我有一个csv文件,第一列是棒球运动员的名字,后面的每一项都是一些统计数据。我想把这个文件导入,这样运动员的名字就能和这些统计数据组成一个元组。

现在我用下面的代码导入文件:

Orioles = file("Orioles.csv", "rU")
for row in Orioles:
    print row

结果是这样的:

[Nick_Markakis, '.005', '.189', '.070', '.002', '.090']
[Adam_Jones, '.005', '.189', '.070', '.002', '.090']

我希望统计数据能以浮点数的形式列出,而不是字符串,并且能够提取出运动员的名字,以便后续使用,像这样:

Nick_Markakis = ['.005', '.189', '.070', '.002', '.090']
Adam_Jones = ['.005', '.189', '.070', '.002', '.090']

2 个回答

2
Orioles = file("Orioles.csv", "rU")
stats = dict((row[0], map(float, row[1:])) for row in Orioles)
# In Python 2.7+: stats = {row[0]: map(float, row[1:]) for row in Orioles}
print(sum(stats['Nick_Markakis'])) # 0.356

现在,你可以这样来查看统计数据:

4

把玩家名字单独放在一个变量里,其实没你想的那么有用:你不能对这个名字进行循环处理(因为根本没有集合),你的代码也很固定和脆弱(当你需要添加或删除玩家名字时,就得手动增加或减少代码行等等)。

但是,如果你把这些名字放在一个字典里——那么你就可以进行循环处理,而且还可以通过名字来查找玩家。

player_data = file("Orioles.csv", "rU")
orioles = dict()
for row in player_data:
    row = row.split(',')
    orioles[row[0]] = tuple(map(float, row[1:]))

print orioles.keys()
# ['Adam_Jones', 'Nick_Markakis']
print orioles['Adam_Jones']
# (0.005, 0.189, 0.07, 0.002, 0.09)

与其使用上面提到的 row.split(',') 方法,实际上你可能更想在真实代码中使用 csv 模块。

撰写回答