使用csv.writer将字典写入CSV时,如何消除字符间的空格?
问题原因
你遇到的字符间自动加空格的问题,核心是用错了csv.writer的writerow方法:
writerow()要求传入字段组成的列表/可迭代对象,但你直接传了一个拼接好的字符串。字符串本身是字符的迭代器,所以每个字符会被当成独立字段。- 再加上你设置了
delimiter=' ',csv模块会自动在每个字段(也就是每个字符)之间插入空格分隔,最终就出现了每个字符间都有空格的情况。
解决方法
方法1:保留拼接格式作为单个字段写入
如果想保持dates:key:count这种格式作为一行内容,只需要把字符串放进一个列表里,让writerow把它当成一个字段处理:
import csv # 注意:不要用dict作为变量名,会覆盖Python内置的dict类型 with open(r'Redacted', 'w', newline='') as reportCSV: # 如果不需要空格分隔,删掉delimiter=' '用默认逗号;如果确实要空格分隔则保留 writer = csv.writer(reportCSV) for dates, info in your_dict.items(): for key in info: # 把拼接后的字符串放在列表中,作为单个字段传入 writer.writerow([f"{dates}:{key}:{str(info[key])}"])
方法2:生成标准CSV格式(更推荐)
如果是要做规范的CSV文件,建议把dates、key、count作为独立字段,让csv模块自动处理分隔,后续读取和分析会更方便:
import csv with open(r'Redacted', 'w', newline='') as reportCSV: writer = csv.writer(reportCSV) # 默认分隔符是逗号,符合CSV标准 # 可选:写入表头 writer.writerow(['日期', '事件', '发生次数']) for dates, info in your_dict.items(): for key in info: # 直接传入三个字段,csv模块会自动用分隔符分开 writer.writerow([dates, key, info[key]])
额外注意点
- 不要用
dict作为变量名,这会覆盖Python内置的dict类型,引发潜在问题。 - 写入CSV时建议加上
newline=''参数,避免不同系统下出现多余空行的问题。
内容的提问来源于stack exchange,提问作者Shirt
相关产品推荐
相关产品推荐

