如何拆分CSV行,使行[0]是名称,其余项是元组?

2024-04-19 20:54:11 发布

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

我有一个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']

Tags: 文件csv项目名字播放器nick统计数据row
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

将播放器名称作为它自己的变量并不像您想象的那样有帮助:您不能遍历集合(因为没有集合),您的代码是固定的和脆弱的(当从文件中添加或删除播放器名称时,您必须添加/删除行,等等)

不过,如果你把它们放在字典里——好吧,现在你可以迭代了,你仍然可以按名字要求玩家。

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模块。

相关问题 更多 >