You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Python将数据写入CSV的不同列?解决数据挤入同一列问题

解决CSV写入后Excel中所有值挤在同一列的问题

嘿,我之前也碰到过一模一样的问题!你用csv.DictWriter的思路完全没问题,但有两个容易忽略的小细节,导致Excel没法正确识别列分隔:

问题根源

  1. 缺少newline=''参数:在Windows系统下,用open()打开文件时如果不指定newline=''csv模块写入时会自动插入多余的换行符,这会干扰Excel的解析逻辑。
  2. 分隔符不匹配: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

火山引擎 最新活动