Skip to main content
 首页 » 编程设计

python之使用复杂的列表数据编写 CSV 文件

2024年11月01日11lexus

我正在尝试将复杂的字典列表写入 CSV,但出现编码和值错误。我还没有真正使用过 Python 中的数据,所以我是新手。

import csv 
 
with open("output.csv", 'rb', encoding='utf-8-sig', newline='') as f: 
    writer = csv.writer(f, delimiter=",") 
    for row in row_num:   
        writer.writerows(row_num) 
 
 Traceback (most recent call last): 
 File "<console>", line 1, in <module> 
 ValueError: binary mode doesn't take a newline argument 

如果我删除编码,我会得到:io.UnsupportedOperation: write

这是我要写入 CSV 文件的数据示例,其中 header 是 codehid 之类的键:

 [OrderedDict([('code', '7nsdjfk'), ('hid', '220'), ('name', 'sdjlnj dkldk slkdlkd'), ('code2', '99'), ('description', 'dmldc skdlmls wsldfml'), ('average', '0'), ('ccr', '0.218'), ('ccr_price', '399'), ('dusk sdks', '603'), ('dcfl lldcml', '3847.9'), ('id', 'sdklcldkcdslkcmsdl202i')]), OrderedDict([ ...]), OrderedDict([...])] 

请您参考如下方法:

将模式更改为纯文本

CSV 代表逗号分隔值。此格式包含纯文本。

此外,'rb' 表示读取 r 二进制文件 b,这与纯文本不一致。

尝试使用 'wt' 或仅使用 'w' 来实际编写一个纯文本文件。

Check the python docs了解有关 open() 函数的更多信息。

编辑:将数据写入文件

我想出了这个解决方案:

  • csv.writer 被替换为 csv.DictWriter,后者接收 keys
  • writer.writeheader()keys 作为以逗号分隔的 header 插入
  • writer.writerows(row_num) 将值写入文件,每个 OrderedDict
  • 一行
from collections import OrderedDict 
import csv 
 
row_num = [OrderedDict([('code', '7nsdjfk'), ('hid', '220'), ('name', 'sdjlnj dkldk slkdlkd'), ('code2', '99'), ('description', 'dmldc skdlmls wsldfml'), 
                        ('average', '0'), ('ccr', '0.218'), ('ccr_price', '399'), ('dusk sdks', '603'), ('dcfl lldcml', '3847.9'), ('id', 'sdklcldkcdslkcmsdl202i')]), 
           OrderedDict([('code', 'a'), ('hid', '1'), ('name', 'b'), ('code2', '1'), ('description', 'c'), 
                        ('average', '1'), ('ccr', '0.123'), ('ccr_price', '133'), ('dusk sdks', '133'), ('dcfl lldcml', '1345.9'), ('id', 'abcde')]), 
        ] 
 
keys = row_num[0].keys() 
 
with open("output.csv", 'wt', encoding='utf-8-sig', newline='') as f: 
    writer = csv.writer(f, delimiter=",") 
    writer = csv.DictWriter(f, keys) 
    writer.writeheader() 
 
    # write values 
    writer.writerows(row_num) 

output.csv 中的结果是:

code,hid,name,code2,description,average,ccr,ccr_price,dusk sdks,dcfl lldcml,id 
7nsdjfk,220,sdjlnj dkldk slkdlkd,99,dmldc skdlmls wsldfml,0,0.218,399,603,3847.9,sdklcldkcdslkcmsdl202i 
a,1,b,1,c,1,0.123,133,133,1345.9,abcde