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

      使用 struct 模块需要使用 pack() 方法吧对象按指定个数进行序列化,然后使用文件对象的write方法将序列化的结果写入二进制文件;读取时需要使用文件对象的read()方法读取二进制文件内容,然后再使用struct模块的unpack()方法反序列化得到原来的信息。

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

     1 #导入模块
     2 import struct
     3 
     4 #准备需要序列化的数据
     5 n = 1300000000
     6 x = 96.45
     7 b = True
     8 s = 'al@中国'
     9 sn = struct.pack('if?',n,x,b)  #序列化,i表示整数,f表示实数,?表示逻辑值
    10 f = open('sample_struct.dat','wb')
    11 f.write(sn)                    #将序列化后的对象写入文件
    12 f.write(s.encode())            #字符串需要编码为字节串再写入文件
    13 f.close()
    14 
    15 #使用struct模块读取上例中写入的二进制文件内容。
    16 f = open('sample_struct.dat','rb')
    17 sn = f.read(9)
    18 tu = struct.unpack('if?',sn)
    19 print(tu)    #(1300000000, 96.44999694824219, True)   浮点数,python中保存的是不准确的
    20 
    21 s = f.read(9)
    22 s = s.decode()    #字符串解码
    23 print(s)          #al@中国

      小提示:在上面的代码中,可能读者会疑惑如何确定要读取几个字节,为什么是 9 而不是其他数字呢?看完下面的代码应该能明白了。

     1 >>> import struct
     2 >>> struct.pack('if?',13000,56.0,True)
     3 b'xc82x00x00x00x00`Bx01'
     4 >>> len(_)
     5 9
     6 >>> struct.pack('if?',9999,5336.0,False)
     7 b"x0f'x00x00x00xc0xa6Ex00"
     8 >>> len(_)
     9 9
    10 >>> 
    11 >>> x = 'al@中国'
    12 >>> len(x.encode())
    13 9
    14 >>> 
  • 相关阅读:
    关于 Xpath 定位
    关于安全渗透测试
    hashlib python 加密框架
    Flask pythn Web 框架总结
    HTMLTestRunner 报告框架使用
    Unittest
    随笔-关于飞机维修检测-想到的
    LoadRunner 工具使用
    Appium
    ak发大水发
  • 原文地址:https://www.cnblogs.com/avention/p/8779270.html
Copyright © 2011-2022 走看看