[英]Writing to a CSV file in Python
我对Python完全陌生,但是对其他语言非常精通,所以我至少对正在发生的事情有一些了解。 我没有编写此代码,但是我正在尝试使其达到我的目的。
我正在使用API检索有关上赛季NFL中每场比赛的统计信息。 我正在尝试将此信息写入CSV文件,到目前为止,它是将标头写入文件,而不是实际数据。
有人可以告诉我我在做什么错吗?
import csv
import nflgame
games = nflgame.games_gen(2013, kind='REG')
plays = nflgame.combine_plays(games)
headers = []
for statId, info in nflgame.statmap.idmap.iteritems():
headers += info['fields']
headers.sort()
headers = ['gsis_id', 'drive_id', 'play_id', 'desc'] + headers
writer = csv.DictWriter(open('2013_regular_plays.csv', 'w+'), fieldnames=headers)
writer.writerow({k: k for k in headers})
for p in plays:
row = {k: getattr(p, k, 0) for k in headers}
row['gsis_id'] = p.drive.game.eid
row['drive_id'] = p.drive_num
row['play_id'] = p.playid
row['desc'] = p.desc
writer.writerow(row)
看起来应该可以正常工作了。
与文档相比,唯一错误的细节是该文件应以二进制模式( w+b
)打开。
同样,在您查看文件之前,关闭文件很重要:
with open('2013_regular_plays.csv', 'w+b') as csv_file:
writer = csv.DictWriter(csv_file, fieldnames=headers)
…
将在with
块之后自动关闭文件(如果未在此块内读取文件,则文件模式可以更简单地为wb
)。 如果在关闭文件之前先查看文件,其内容可能仍驻留在RAM中而不是磁盘上。
PS :正如DSM所指出的那样,当您使用w+
(或w+b
)模式打开for statId, info in…
每次迭代时for statId, info in…
清空CSV文件 。 如果最后一次迭代没有播放,则文件最终将为空(仅包含标头)。 您通常希望在循环之前打开CSV文件(甚至可能只是使用wb
模式)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.