VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > 简明python教程 >
  • python csv、json、pickle数据持久化

一. 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来解决。

二 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具体代码示例

2. json简单使用介绍

(1. json模块API说明

python转换json

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转换python

1.object_hook是一个可选的函数,它将被任何对象字面值解码(dict)的结果调用。

2.parse_float(如果指定)将使用要解码的每个JSON浮点的字符串进行调用。

同上用法

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

(2. json具体使用示例

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具体示例

三.使用场景

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


相关教程