1. csv/json/pickle基本概念

csv:CSV(Comma Separated Values)格式是电子表格和数据库最常见的导入和导出格式。用文本文件形式储存的表格数据,可以使用excel打开,易于阅读,

json:数据交换格式。用于提升网络传输效率,可以字符串和python之间的转换,可用于网页上这种数据传输,支持跨语言

pickle:pickle模块实现了用于对Python对象结构进行序列化和反序列化的二进制协议,人类无法识别

在pickle协议和JSON(JavaScript对象表示法)之间存在根本区别:

  • JSON是一种文本序列化格式(它输出unicode文本,虽然大多数时候它被编码为utf-8),而pickle是一个二进制序列化格式;
  • JSON是人类可读的,而pickle不是;
  • JSON是可互操作的,并且在Python生态系统之外广泛使用,而pickle是特定于Python的;
    默认情况下,JSON只能表示Python内建类型的一个子集,并且没有自定义类; pickle可以代表极大数量的Python类型
    其中许多是通过巧妙地使用Python内省功能自动实现的;复杂的情况可以通过实现specific object APIs来解决。

2 csv/json/pickle基本使用方法

1. csv

1. csv模块API说明

csv模块的reader和writer对象读取和写入序列。程序员还可以使用DictReader和DictWriter类以字典形式读取和写入数据。
csv模块定义以下函数:
1.csv.reader(csvfile, dialect=‘excel’, * * fmtparams)

  • 返回一个读取器对象,它将在给定的csvfile中迭代。csvfile可以是任何支持iterator协议的对象,并且每次调用 __ next __ ()方法时返回一个字符串 - file objects和列表对象都是合适的。
  • 如果csvfile是文件对象,则应使用newline=’'打开它。如果没有使用newline="",写到文件中会在每行结束加个\t换行符
    2.csv.writer(csvfile, dialect=‘excel’, * * fmtparams)
    返回一个writer对象,可以使用writerow(data),writerows(datas)
    csv模块定义以下类:

(1.class csv.DictReader(csvfile, fieldnames=None, restkey=None, restval=None, dialect=‘excel’, *args, * *kwds)
创建一个对象,其操作类似于普通读取器,但将读取的信息映射到一个dict中,其中的键由可选的fieldnames参数给出。
fieldnames参数是一个sequence,其元素按顺序与输入数据的字段相关联。这些元素成为结果字典的键。

(2.class csv.DictWriter(csvfile, fieldnames, restval=’’, extrasaction=‘raise’, dialect=‘excel’, *args, * *kwds)
创建一个操作类似于常规writer的对象,但将字典映射到输出行。
fieldnames参数是一个sequence,用于标识传递给writerow()方法的字典中的值被写入csvfile。
如果传递给writerow()方法的字典包含fieldnames中未找到的键,则可选的extrasaction参数指示要执行的操作。

2.csv具体代码示例

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import csv# 例一
with open('test.csv', 'w', encoding='utf-8',newline="") as f:lst = ['活下去的诀窍是', '保持愚蠢', '又不能知道自己有多蠢']writer = csv.writer(f)writer.writerows(lst)or #使用writerowfor x in lst:writer.writerow(x)
#注意open文件应设置encoding和newline参数
#writer() 通过 writerrow() 或 writerrows() 写入一行或多行数据。# 例二
with open('test.csv', 'w', encoding='utf-8', newline="") as csvfile:fieldnames = ['name', 'age', 'sex']d = [{'name': '小明','age': 32,'sex': '男'}, {'name': '小强','age': 12,'sex': '男'},{'name': '小蓝','age': 22,'sex': '男'}]writer = csv.DictWriter(csvfile, fieldnames=fieldnames)writer.writeheader()writer.writerows(d)
#DictWriter() 必须指定参数 fieldnames 说明键名,通过 writeheader() 将键名写入,通过 writerrow() 或 writerrows() 写入一行或多行字典数据。# 读操作
with open('test.csv', newline='',encoding='utf-8') as csvfile:t = csv.reader(csvfile, delimiter=' ')for row in t:print(t)with open('test.csv') as csvfile:reader = csv.DictReader(csvfile)for row in reader:print(row['name'], row['age'])
#DictReader() 返回有序字典,使得数据可通过字典的形式访问,键名由参数 fieldnames 指定,默认为读取的第一行。

2. json简单使用介绍

1. json模块API说明

python转换json

json.dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

1.将obj序列化为fp,json模块总是产生str对象,而不是bytes对象。因此,fp.write()必须支持str输入。
2.如果 skipkeys 的值为 true (默认为: False), 那么不是基本类型 (str, int, float, bool, None)的字典键将会被跳过, 而不是引发一个 TypeError 异常.
3.如果indent是非负整数或字符串,缩进
4.separator = (item_separator, key_separator),默认(’,’,’:’)
5.sort_keys为真(默认值:False),则字典的输出将按键排序。
6.遇见复杂的python无法转换时使用default参数,覆盖default()方法以序列化其他类型

json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

同上用法
json转换python

json.load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

1.object_hook是一个可选的函数,它将被任何对象字面值解码(dict)的结果调用。
2.parse_float(如果指定)将使用要解码的每个JSON浮点的字符串进行调用。

json.loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

同上用法
对于复杂的结构我们可以自定义解码和编码

class json.JSONDecoder(object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None)
class json.JSONEncoder(skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)

2. json具体使用示例

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import json
# 简单编码===========================================
print json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
# ["foo", {"bar": ["baz", null, 1.0, 2]}]obj = ['foo', {'bar': ('baz', None, 1.0, 2)}]
a= json.dumps(obj)
# 反序列化
print json.loads(a)
# [u'foo', {u'bar': [u'baz', None, 1.0, 2]}]#字典排序
print json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)
# {"a": 0, "b": 0, "c": 0}#自定义分隔符
print json.dumps([1,2,3,{'4': 5, '6': 7}], sort_keys=True, separators=(',',':'))
# [1,2,3,{"4":5,"6":7}]
print json.dumps([1,2,3,{'4': 5, '6': 7}], sort_keys=True, separators=('/','-'))
# [1/2/3/{"4"-5/"6"-7}]#增加缩进,增强可读性,但缩进空格会使数据变大
print json.dumps({'4': 5, '6': 7}, sort_keys=True,indent=2, separators=(',', ': '))
# {
#   "4": 5,
#   "6": 7
# }# 另一个比较有用的dumps参数是skipkeys,默认为False。
# dumps方法存储dict对象时,key必须是str类型,如果出现了其他类型的话,那么会产生TypeError异常,如果开启该参数,设为True的话,会忽略这个key。
data = {'a':1,(1,2):123}
print json.dumps(data,skipkeys=True)
#{"a": 1}#将对象序列化并保存到文件
obj1 = ['foo1', {'bar': ('baz', None, 1.0, 2)}]
obj2 = ['foo2', {'bar': ('baz', None, 1.0, 2)}]with open(r"json.txt","w+") as f:json.dump(obj1,f)json.dump(obj2,f)with open(r"json.txt","r") as f:print json.load(f)print(json.load(f))

3.pickle使用

1.pickle模块API说明

pickle模块实现了用于对Python对象结构进行序列化和反序列化的二进制协议

1.pickle.dump(obj, file, protocol=None, *, fix_imports=True)
将obj的腌制表示写入打开的file object 文件。这相当于Pickler(文件, 协议).dump(obj)。

2.pickle.dumps(obj, protocol=None, *, fix_imports=True)
将对象的腌制表示作为bytes对象返回,而不是将其写入文件。

3.pickle.load(file, *, fix_imports=True, encoding=“ASCII”, errors=“strict”)
从打开的文件对象file读取pickled对象表示形式,并返回其中重新构建的对象层次结构。它等同于Unpickler(file).load()。

4.pickle.loads(bytes_object, *, fix_imports=True, encoding=“ASCII”, errors=“strict”)
从bytes对象读取腌制对象层次结构,并返回其中指定的重构对象层次结构。

2.pickle具体示例

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import pickle#序列化操作
d = [ 'person1':{'name':'jack','age':33}, 'person2':{'name':'tom','age':133}]
pk = pickle.dumps(d)#反序列化操作
src_dic = {"date":date.today(),"oth":([1,"a"],None,True,False),}
det_str = pickle.dumps(src_dic)#写到文件中,注意使用"wb"
with open('pickle.txt', 'wb') as f:d = [{'安其拉': 1, '是否': 2}, {'李白': 12, '分': 22}, {'后羿': 13, 'b': 24}]pickle.dump(d, f)dd = [{'a': 1, '拉克丝': 2}, {'老子': 12, 'b': 22}, {'a': 13, 'b': 24}]pickle.dump(dd, f)#读取文件"rb"
with open('pickle.txt', 'rb') as f:while True:try:row = pickle.load(f)print(row)except Exception as e:print(e)break

3.使用场景

1.pickle主要用于存储计算过数据,保存下来下次使用直接获取,特点是他的读写效率高于一般文件,存储大小也更小
2.json主要用于网络直接传递数据,存储一些结构化数据
3.CSV 通常用于在电子表格软件和纯文本之间交互数据。实际上,CSV 都不算是一个真正的结构化数据,CSV 文件内容仅仅是一些用逗号分隔的原始字符串值。

python csv、json、pickle数据持久化相关推荐

  1. Python基础 day4 迭代器生成器 装饰器 Json pickle 数据序列化 软件目录结构规范 作业:ATM项目开发...

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 列表生成器 1.列表生成式,迭代器&生成器 列表生成式 孩子, ...

  2. Python-Day4 Python基础进阶之生成器/迭代器/装饰器/Json pickle 数据序列化

    一.生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面 ...

  3. 迭代器/生成器/装饰器 /Json pickle 数据序列化

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...

  4. Day4 - 迭代器生成器、装饰器、Json pickle 数据序列化、软件目录结构规范

    ---恢复内容开始--- 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表 ...

  5. python操作json_Python学习之利用Python处理JSON格式数据

    最近在研究利用zabbix的自动发现功能来监控一台服务器上的多个Redis端口.网上有篇文章写个Python程序来发现Redis端口并显示成JSON格式.这里就学习下Python如何处理JSON格式数 ...

  6. python模块--json \ pickle \ shelve \ XML模块

    一.json模块 之前学习过的eval内置方法可以将一个字符串转成一个python对象,不过eval方法时有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,e ...

  7. Python(序列化json,pickle,shelve)

    序列化 参考:https://www.cnblogs.com/yuanchenqi/articles/5732581.html 1 # dic = str({'1':'111'}) 2 # 3 # f ...

  8. python处理json格式数据

    文章目录 一.背景 1.序列化 1.1 json.dump() 1.2 to_json() 1.3json.dumps() 2.反序列化 2.1 json.load() 2.2 read_json() ...

  9. Python将JSON格式数据转换为SQL语句以便导入MySQL数据库

    前文中我们把网络爬虫爬取的数据保存为JSON格式,但为了能够更方便地处理数据.我们希望把这些数据导入到MySQL数据库中.phpMyadmin能够把MySQL数据库中的数据导出为JSON格式文件,但却 ...

最新文章

  1. C#中将结构类型数据存储到二进制文件中方法
  2. 计算机软件可以一次摊销吗,研发用无形资产可以一次摊销吗
  3. unity windows打包ios_ios打包unity应用以及配置签名!
  4. Linux学习总结(四十七)NFS服务配置 上篇
  5. ORACLE RAC 重新安装时清空ASM 磁盘命令
  6. 安卓APP_ 布局(5) —— GridLayout网格布局
  7. Vagrant搭建可移动的PHP开发环境
  8. 2、Task 使用 ContinueWith 而不要使用 Wait
  9. [C++] pair
  10. java上传图片到oracle_JavaWeb项目 js图片上传到Oracle转为base64存入数据库
  11. java物流管理系统代码_Java物流配送管理系统 Spring 源码下载
  12. 1元云购网站建设,一元云购网站制作,夺宝网站定制公司,一元云购源码开发
  13. 电力拖动计算机控制系统讲什么,《电力拖动自动控制系统》教学大纲概要
  14. 一例信息窃取木马分析报告
  15. python中db是什么意思_Python3爬虫中MongoDB的存储操作是什么
  16. texstudio如何安装cjk宏包_Latex+CJK从安装到使用【1】
  17. hbase 问题之 File system needs to be upgraded. You have version null and I want ver
  18. Windows Server 2012 家用优化
  19. 【计算机基础】03-Word习题
  20. 用于汽车传感器的混合点云语义压缩:性能评估

热门文章

  1. md 语法之表格:对齐和换行
  2. 1150. 【克罗地亚】NIKOLA
  3. 前端必须掌握的7种设计模式
  4. ubuntu安装命令汇总
  5. c++算法训练(4)
  6. 你的代码被冰冻到北极了吗?
  7. 怎么做前后端分离的个人博客,内部还有仿网易云音乐模块?点进便知!(基于Vue,Springboot+mybatisplus+SpringCloud+ElasticSearch等框架实现)
  8. 学会这些方法,win10效率提升9999%
  9. 最近在做动画相关的项目,推荐 11 个好用的 JS 动画库
  10. Tacacs-配置single-connection单连接模式证测试与总结