如何使用Python将数据写入CSV的不同列?解决数据挤入同一列问题
解决CSV写入后Excel中所有值挤在同一列的问题
嘿,我之前也碰到过一模一样的问题!你用csv.DictWriter的思路完全没问题,但有两个容易忽略的小细节,导致Excel没法正确识别列分隔:
问题根源
- 缺少
newline=''参数:在Windows系统下,用open()打开文件时如果不指定newline='',csv模块写入时会自动插入多余的换行符,这会干扰Excel的解析逻辑。 - 分隔符不匹配:Excel在部分地区(比如欧洲)默认用分号
;作为CSV的列分隔符,但Python的csv模块默认用逗号,,这就导致Excel把整行内容当成了单独一列。
修改后的完整代码
我给你调整了代码,同时还修复了追加模式下重复写表头的问题(原代码每次追加都会写一遍表头,这会让CSV文件变得混乱):
import csv from datetime import datetime # 先模拟你的变量(实际使用时替换成你自己的变量) now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") d_ordernum = "SO-2024-001" d_hw_version = "V1.2" d_sf_version = "SF-3.0" pc_praefix = "PROD-007" d_dev_typ = "SensorX" scancode_string = "SCAN-98765" ord_nmr = "WB-456" v = "V1.2" b = "SF-3.0" mac_addr = "00:1A:2B:3C:4D:5E" product_code = "COMB-007-SensorX" dev_typ = "SensorX" with open('log.csv', 'a', newline='', encoding='utf-8') as file: fieldnames = ['Timestamp', 'Overall result', 'Soll-orderno', 'Desired-HW-Version', 'Desired-SF-Version', 'Desired-productcode', 'Desired-device-type', 'Scancode', 'Wbm-orderno', 'Wbm-HW-Version', 'Wbm-SF-Version', 'Wbm-mac-address', 'test-product-code', 'combined-product-code' , 'wbm-device-type', 'test-device-type'] # 如果你用的Excel默认识别分号,就把delimiter改成';' writer = csv.DictWriter(file, fieldnames=fieldnames, delimiter=',') # 仅当文件为空时才写入表头,避免重复 file.seek(0, 2) if file.tell() == 0: writer.writeheader() writer.writerow({ 'Timestamp':now, 'Overall result':'Blank', 'Soll-orderno':d_ordernum, 'Desired-HW-Version':d_hw_version, 'Desired-SF-Version':d_sf_version, 'Desired-productcode':pc_praefix, 'Desired-device-type':d_dev_typ, 'Scancode':scancode_string, 'Wbm-orderno':ord_nmr, 'Wbm-HW-Version':v, 'Wbm-SF-Version':b, 'Wbm-mac-address':mac_addr, 'test-product-code':'Blank', 'combined-product-code':product_code, 'wbm-device-type':dev_typ, 'test-device-type':'Blank' })
额外小贴士
- 如果改完分隔符还是不行,试试用Excel的数据导入功能:点击「数据」→「自文本/CSV」,选择你的log.csv,然后在导入向导里手动指定分隔符(逗号或分号),这样肯定能正确拆分列。
- 添加
encoding='utf-8'是为了避免特殊字符或中文乱码,后续如果有非ASCII内容也能正常显示。
内容的提问来源于stack exchange,提问作者BarryKingston




