zoukankan      html  css  js  c++  java
  • 6.3.1 使用 pickle 模块读写二进制文件

      Python 标准库 pickle 提供的 dump() 方法 用于将数据进行序列化并写入文件(dump() 方法的protocol 参数为True 时可以实现压缩的效果),而load() 用于读取二进制文件内容并进行反序列化,还原为原来的信息。

      1 使用 pickle模块写入二进制文件。

     1 #导入模块
     2 import pickle
     3 
     4 #准备要序列化的数据
     5 n = 7
     6 i = 13000000
     7 a = 99.056
     8 s = '中国人民 123abc'
     9 lst = [[1,2,3],[4,5,6],[7.8,9]]
    10 tu = (-5,10,8)
    11 coll = {4,5,6}
    12 dic = {'a':'apple','b':'banana','g':'grape','o':'orange'}
    13 aa = 'c'
    14 
    15 #以写模式打开二进制文件
    16 f = open('sample_pickle.dat','wb')
    17 try:
    18     pickle.dump(n,f)    #对象个数
    19     pickle.dump(i,f)    #写入整数
    20     pickle.dump(a,f)    #写入实数
    21     pickle.dump(s,f)    #写入实数
    22     pickle.dump(lst,f)  #写入列表
    23     pickle.dump(tu,f)   #写入元组
    24     pickle.dump(coll,f) #写入集合
    25     pickle.dump(dic,f)  #写入字典
    26 except:
    27     print('写文件异常')
    28 finally:
    29     f.close()
    30 
    31 #看一下文件内容,已经写入成功。

      2 使用 pickle 模块读取上例写入二进制文件的内容

     1 #导入模块
     2 import pickle
     3 
     4 #打开二进制文件
     5 f = open('sample_pickle.dat','rb')
     6 n = pickle.load(f)
     7 print(n)                 #读取文件中数据个个数  7
     8 
     9 for i in range(n):      #文件中有多少个对象就循环多个少次
    10     x = pickle.load(f)   #依次读取文件中对象
    11     print(x)
    12 f.close()
    13 
    14 '''
    15 7
    16 13000000
    17 99.056
    18 中国人民 123abc
    19 [[1, 2, 3], [4, 5, 6], [7.8, 9]]
    20 (-5, 10, 8)
    21 {4, 5, 6}
    22 {'a': 'apple', 'b': 'banana', 'g': 'grape', 'o': 'orange'}
    23 '''

      

      小提示:pickle 模块还提供了一个 dumps() 方法,可以返回对象序列化之后的字节形式,例如:

     1 >>> import pickle
     2 >>> pickle.dumps([1,2,3])
     3 b'x80x03]qx00(Kx01Kx02Kx03e.'
     4 >>> 
     5 >>> pickle.dumps([1,2,3,4])
     6 b'x80x03]qx00(Kx01Kx02Kx03Kx04e.'
     7 >>> 
     8 >>> pickle.dumps({1,2,3,4})
     9 b'x80x03cbuiltins
    set
    qx00]qx01(Kx01Kx02Kx03Kx04ex85qx02Rqx03.'
    10 >>> 
    11 b'x80x03Kx01Kx02Kx03x87qx00.'
    12 >>> 
    13 >>> pickle.dumps(123)
    14 b'x80x03K{.'
    15 >>> 

      拓展阅读:下面的代码可以用来把文本文件转换为二进制文件,其中,infomation.txt是包含若干文本信息的源文件,infomation_pickle.dat是转换后的二进制文件。

     1 #导入模块
     2 import pickle
     3 
     4 with open('infomation.txt','r',encoding='utf-8') as src,open('infomation_pickle.dat','wb') as dest:
     5     lines = src.readlines()  #把源文件中的所有内容都读取到 lines 列表中
     6     pickle.dump(len(lines),dest)  #先写入对象个数
     7     for line in lines:
     8         pickle.dump(line,dest)
     9 
    10 #上面就是已经把数据写入到二进制文件中了,下面从二进制文件中反序列化对象
    11 with open('infomation_pickle.dat','rb') as f:
    12     n = pickle.load(f)
    13     for i in range(n):
    14         print(pickle.load(f))
  • 相关阅读:
    DOM操作:
    定时器
    7.thinkphp框架控制器
    1.thinkphp框架介绍
    4.thinkphp框架url访问
    6.thinkphp框架路由
    2.thinkphpk框架基础
    5.thinkphp框架配置文件
    3.thinkphp框架入口文件
    8.thinkphp框架数据库
  • 原文地址:https://www.cnblogs.com/avention/p/8777670.html
Copyright © 2011-2022 走看看