将第一行的分隔符从 ',' 替换为 ';'在 csv 文件中 Python
Replace the delimiter of first line from ',' to ';' in csv file by Python
我得到一个奇怪的 csv 文件,它的 header 的分隔符是 ',' 而普通行的分隔符是 ';' 这给我带来麻烦 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
我想知道我是否可以只用 ';' 替换 header 的分隔符,或者是否有一种方法可以将这样的 csv 文件读取为字典而不用更改 header 的分隔符?
顺便说一句: 我正在使用 Python 2.7.12 和 Anaconda 4.0.0 通过 IDE PyCharm
您可以使用经典 csv reader 读取第一行,只是为了获取字段名称,然后继续使用字典 reader 读取,此时将分隔符更改为 ;
点.
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:我之前的解决方案涉及 reading/writing 到 StringIO
,但当前的解决方案更加优雅。
我得到一个奇怪的 csv 文件,它的 header 的分隔符是 ',' 而普通行的分隔符是 ';' 这给我带来麻烦 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
我想知道我是否可以只用 ';' 替换 header 的分隔符,或者是否有一种方法可以将这样的 csv 文件读取为字典而不用更改 header 的分隔符?
顺便说一句: 我正在使用 Python 2.7.12 和 Anaconda 4.0.0 通过 IDE PyCharm
您可以使用经典 csv reader 读取第一行,只是为了获取字段名称,然后继续使用字典 reader 读取,此时将分隔符更改为 ;
点.
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:我之前的解决方案涉及 reading/writing 到 StringIO
,但当前的解决方案更加优雅。