python优雅写出文件之csv

13 篇文章 0 订阅

将各种常见的数据类型写出到csv
持续更新…

预计收录:list(√)、dict(√)、numpy 等写出到csv

1. 列表写出到csv

import csv

data_list = [['John', 23, 'USA'],
         ['Jose', 44, 'Spain'],
         ['Anne', 29, 'UK'],
         ['Japan', 35, 'Lee']]

with open('data_list.csv', 'w', newline='') as csvfile:
    writer = csv.writer(csvfile)
    for row in data_list:
        writer.writerow(row)

data_list.csv内容

John,23,USA
Jose,44,Spain
Anne,29,UK
Japan,35,Lee


2. 字典写出到csv

import csv

data = {'Name': 'John', 'Age': '23', 'Country': 'USA'}

with open('data.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    for k, v in data.items():
        writer.writerow([k, v])

data.csv 内容

Name,John
Age,23
Country,USA


3. 字典数组写出到csv

import csv

labels = ['Name', 'Age', 'Country']
dct_arr = [
  {'Name': 'John', 'Age': '23', 'Country': 'USA'},
  {'Name': 'Jose', 'Age': '44', 'Country': 'Spain'},
  {'Name': 'Anne', 'Age': '29', 'Country': 'UK'},
  {'Name': 'Lee', 'Age': '35', 'Country': 'Japan'}
]
# 用异常处理来包装操作文件的代码,可以防止外部错误或关于文件写入过程的不兼容。
# 字典的kv对顺序可以与labels不一致,可以缺少,但不能有labels不存在的key
try:
    with open('data_dict.csv', 'w', encoding='utf-8', newline='') as f:
        writer = csv.DictWriter(f, fieldnames=labels)
        writer.writeheader()
        for elem in dct_arr:
            writer.writerow(elem)
except IOError:
    print("I/O error")

data_dict.csv 内容

Name,Age,Country
John,23,USA
Jose,44,Spain
Anne,29,UK
Lee,35,Japan

参考: 在 Python 中将字典写入 CSV

小结:字典数组比嵌套列表更能保证数据可靠哦~



n. 补充: import json

1. 字典写出到 json

import json

with open('data.json', 'w', encoding='utf-8')as f:
    # ensure_ascii=False   实现中文写入时  保存成中文
    json.dump({'aa':'bb'}, f, ensure_ascii=False, indent=2)

1(逆). 从 json文件写到python

import json

with open('data.json', 'r', encoding='utf-8')as f:
    data = json.load(f)
    print(data)   #{'aa': 'bb'}
    # print(type(data))   #<class 'dict'>

2. 字典数组写出到 json

import json
data_list = [
    {'Name': 'John', 'Age': '23', 'Country': 'USA'},
    {'Name': 'Jose', 'Age': '44', 'Country': 'Spain'},
    {'Name': 'Anne', 'Age': '29', 'Country': 'UK'},
    {'Name': 'Lee', 'Age': '35', 'Country': 'Japan'}
]
with open('data.json', 'w', encoding='utf-8')as f:
    # ensure_ascii=False:不使用ascii,能将unicode字符(形如\uxxxx)显示为中文
    # indent=5:缩进5,json展示更美观
    f.write(json.dumps(data_list, ensure_ascii=False, indent=5))

data.json内容:

[
     {
          "Name": "John",
          "Age": "23",
          "Country": "USA"
     },
     {
          "Name": "Jose",
          "Age": "44",
          "Country": "Spain"
     },
     {
          "Name": "Anne",
          "Age": "29",
          "Country": "UK"
     },
     {
          "Name": "Lee",
          "Age": "35",
          "Country": "Japan"
     }
]

2(逆). json文件写入为python的字典数组类型

将data.json文件内容读到data_list(列表的每个元素为dict):

import json
with open("data.json","r") as f:
    data_list = json.load(f)
    print(data_list)
    # [{'Name': 'John', 'Age': '23', 'Country': 'USA'}, {'Name': 'Jose', 'Age': '44', 'Country': 'Spain'}, {'Name': 'Anne', 'Age': '29', 'Country': 'UK'}, {'Name': 'Lee', 'Age': '35', 'Country': 'Japan'}]

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卅拓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值