使用csvwriter生成Excel兼容CSV文件时的分隔符异常问题
问题:CSV生成时分隔符被当作值,Excel中出现多余列
从API提取数据后,尝试使用Python的csvwriter生成可在Excel中打开的CSV文件,但出现异常:分隔符被当作值,在实际数据列之间生成了多余列。
原代码
import csv resources_list="resources_list.csv" list_keys_res=[] list_keys_res=list(res['items'][0].keys()) list_items_res=[] list_items_res=list(res['items']) resources = open(resources_list, 'w', newline ='') with resources: # identifying header writer = csv.writer(resources, delimiter=';') header_res = writer.writerow([list_keys_res[1]]+[";"]+[list_keys_res[0]]+[";"]+[list_keys_res[2]]+[";"]+[list_keys_res[4]]) resource=None # loop to write the data into each row of the csv file - a row describes 1 resource for i in list_items_res: resource=list_items_res.index(i) list_values_res=[] list_values_res=list(list_items_res[resource].values()) writer.writerow([list_values_res[1]]+[";"]+[list_values_res[0]]+[';']+[list_values_res[2]]+[";"]+[list_values_res[4]]) i=resource+1
期望生成的CSV格式
name ; id ; userName ; email "Resource 1" ; 1 ; res1 ; myaddress1@host.com "Resource 2" ; 2 ; res2 ; myaddress2@host.com "Resource 3" ; 3 ; res3 ; myaddress3@host.com
实际生成的格式
name;";;id;";;userName;";;email Resource 1;";;1;";; res1;";; myaddress1@host.com Resource 2;";;2;";; res2;";; myaddress2@host.com Resource 3;";;3;";; res3;";; myaddress3@host.com
修正方案
问题核心是手动在writerow的列表中添加了分号,csv.writer会自动使用指定的delimiter=';'来分隔列,手动加入的分号会被当作普通字段值,还会被自动转义,导致出现多余列。
修正后的代码如下:
import csv resources_list = "resources_list.csv" # 获取表头字段(按指定顺序) list_keys_res = list(res['items'][0].keys()) selected_headers = [list_keys_res[1], list_keys_res[0], list_keys_res[2], list_keys_res[4]] # 获取所有数据项 list_items_res = res['items'] with open(resources_list, 'w', newline='') as resources: writer = csv.writer(resources, delimiter=';') # 写入表头 writer.writerow(selected_headers) # 写入每行数据 for item in list_items_res: values = list(item.values()) selected_values = [values[1], values[0], values[2], values[4]] writer.writerow(selected_values)
优化点说明
- 去掉手动拼接的分号,直接传入要写入的字段列表,
csv.writer会自动用;分隔列 - 简化列表初始化逻辑,无需先创建空列表再覆盖
- 遍历数据项时直接使用
item,避免通过index查找,提升效率 - 提取指定顺序的字段/值时,用列表直接选择,逻辑更清晰
这样生成的CSV会正确使用;作为分隔符,Excel打开后不会出现多余列。
内容的提问来源于stack exchange,提问作者Duperito
相关产品推荐
相关产品推荐

