我得到了一个奇怪的csv文件,其标头的定界符为“,”而普通行的定界符为“;”这给我造成麻烦,无法通过python将其作为字典进行读取和处理:
players.first_name,players.last_name,players.vis_name,players.player_id
Duje;Cop;Cop;8465
Dusan;Svento;Svento;8658
Markus;Henriksen;Henriksen;7687
我想知道是否可以仅将标头的定界符替换为';'或者是否有一种方法可以读取这样的csv文件作为字典而无需更改标题的定界符?
顺便说一句:我正在通过IDE PyCharm将Python 2.7.12与Anaconda 4.0.0一起使用
最佳答案
您可以使用传统的csv阅读器阅读第一行,只是要获取字段名称,然后继续使用字典阅读器阅读,此时将分隔符更改为;
。
import csv
with open("input.csv") as f:
cr = csv.reader(f, delimiter=",")
fieldnames = next(cr)
cr = csv.DictReader(f,fieldnames=fieldnames,delimiter=";")
for d in cr:
print(d)
结果:
{'players.player_id': '8465', 'players.vis_name': 'Cop', 'players.first_name': 'Duje', 'players.last_name': 'Cop'}
{'players.player_id': '8658', 'players.vis_name': 'Svento', 'players.first_name': 'Dusan', 'players.last_name': 'Svento'}
{'players.player_id': '7687', 'players.vis_name': 'Henriksen', 'players.first_name': 'Markus', 'players.last_name': 'Henriksen'}
PS:我以前的解决方案涉及到对
StringIO
的读取/写入,但是当前的解决方案要优雅得多。