之前一段时间一直在忙着写毕业论文,盲评搞得人心惶惶,以致于都没有看书,最近需要补上前面落下的东西。

《Python3程序开发指南》

1、二进制数据的读写

二进制格式通常是占据磁盘空间最小、保存与加载速度最快的数据格式。最简单的方法是使用pickle

   pickle模块主要提供了数据持久化功能

  序列化可使用dumps()函数,逆序列化使用loads()函数,将文件中的数据解析为一个python对象。

  现有5种版本的pickle模块,分别为0到4

pickle模块提供的常量:

  pickle.HIGHEST_PROTOCOL:整型,最高协议版本

  pickle.DEFAULT_PROTOCOL:序列化中默认的协议版本,可能会低于HIGHEST_PROTOCOL,目前默认协议为3

pickle模块提供的函数:

  1、pickle.dump(obj,file,protocol=None,*,fix_imports=True)

    将对象obj保存到文件file中,等同于Pickler(file,protocol).dump(obj)

    参数说明:

  obj:将要封装的对象

   protocol:整型,协议版本号,支持的版本号为0到HIGHEST_PROTOCOL,如果没有指定,默认为DEFAULT_PROTOCOL。如果指定为负数,则为HIGHEST_PROTOCOL。

    file:obj将要写入的文件对象,file必须以二进制可写模式打开,即“wb”,该file参数必须有write()方法,该方法能够接受单字节的参数。

     fix_imports:如果fix_imports为true,并且协议版本小于3,那么pickle将python3对应到python2

  2、pickle.dumps(obj)

   以字节对象形式返回封装的对象,不需要写入文件中

  3、pickle.load(file,*,fix_import=True,encoding="ASCII",errors="strict")

   从file中读取一个字符串,并将它重构为原来的python对象

file:必须以二进制可读模式打开,即“rb“,其余为可选参数,有read()和readline()接口

     等同于Unpickler(file).load()

  4、pickle.loads(bites_object)

  从字节对象中读取被封装的对象,并返回pickle模块可能出现的三种异常

   1、 带可压缩的Pickle

Pickle提供了从python程序中保存数据(或向python程序加载数据)的最简单方法。Pickle没有安全机制(没有机密、没有数字签名)。之所以有安全问题,是因为pickle可以导入任意模块并调用任意函数,因此来自不可信源的pickle中的数据可能会被恶意操作。但pickle是处理ad hoc数据的理想选择,针对个人用途的程序更是如此。

pickle.dump(obj,file[,protocol])

如果要求压缩,可使用gzip.open()打开文件,否则使用内置的open()函数。

二进制模式pickling数据时,必须使用“二进制写”模式(wb)

错误处理选择的方式:只要发生错误立即向用户报告,并向调用者返回一个布尔值,以表示成功还是失败。

finally语句块确保文件被关闭

import pickle
import gzip
def export_pickle(self,filename,compress=False):
fh = None
try:
if compress:
fh = gzip.open(filename,"wb")
else:
fh = open(filename,"wb")
pickle.dump(self,fh,pickle.HIGHEST_PROTOCOL)
return True
except (EnvironmentError,pickle.PickleError) as err:
print("{0}:export error:{1}".format(os.path.basename(sys.argv[0]),err))
return False
finally:
if fh is not None:
fh.close()

  

2、struct模块

在python中,需要处理二进制数据,比如在存取文件、socket通信时,这时可以通过struct模块来实现,对此,我翻阅了一些很不错的博客,就不在此班门弄斧。后面会转载一些来学习。

struct模块中,最重要的三个函数:pack(), unpack(), calcsize()。还提供了struct.Struct()类。

struct.pack():

参数:一个struct格式化字符串,一个或多个值

返回:一个bytes对象,其中存放的是按照该格式规范表示的所有这些参数值。

struct.unpack():

参数:一个格式化规范,以及一个bytes或bytearray对象

返回:一个元组,其中的值原本使用该格式规范进行了打包

>>> import struct
>>> data=struct.pack("<2h",11,-9)
>>> data
'\x0b\x00\xf7\xff'
>>> items=struct.unpack("<2h",data)
>>> items
(11, -9)
>>>

 struct.calcsize():

参数:以一个数规范为参数

返回:使用该格式规范的struct所占据的字节数。

格式规范也可以通过创建一个struct.Struct()对象存储(将该格式规范作为其参数),而struct.Struct()对象的大小则由其size属性指定。

>>> TWO_SHORTS = struct.Struct("<2h")
>>> data=TWO_SHORTS.pack(11,-9)
>>> items=TWO_SHORTS.unpack(data)
>>> data
'\x0b\x00\xf7\xff'
>>> items
(11, -9)

  

python文件处理--笔记的更多相关文章

  1. Python 文件学习笔记

    程序1 在上一题的基础上扩展,用户可以随意输入要显示的行数. 如输入2:5表示打印第2行到第5行的内容: 输入:2表示打印从开头到第2行的内容: 输入4:表示打印从第4行到结尾的内容: 输入:表示打印 ...

  2. python文件读书笔记

    一.打开文件 1 f=open('text.txt',r)  二.读取文件 print(f.read) 三.关闭文件 f.close() 比较好用的是运用with with open('text.tx ...

  3. python文件操作笔记

    一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法. 1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 2.切换工作目录: os.c ...

  4. [Python学习笔记][第七章Python文件操作]

    2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...

  5. Python学习笔记(二)-Python文件类型及编程模式

    Python环境搭建:linux,Windows... Linux下:[root@localhost StudyPython]# python #进入交互模式Python 2.7.11 (defaul ...

  6. python 基础学习笔记(5)--文件操作

    **python 的文件操作** - [ ] 使用python来读写文件是非常简单的操作,我们使用open()来打开一个文件,获取到文件的语柄,然后通过文件语柄就可以进行各种各样的操作了. - [ ] ...

  7. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  8. 《简明python教程》笔记一

    读<简明Python教程>笔记: 本书的官方网站是www.byteofpython.info  安装就不说了,网上很多,这里就记录下我在安装时的问题,首先到python官网下载,选好安装路 ...

  9. python核心编程--笔记

    python核心编程--笔记 的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找pyt ...

随机推荐

  1. shell脚本中的标准输出重定向使用涵义

    0表示标准输入 1表示标准输出 2表示标准错误输出 > 默认为标准输出重定向,与 1> 相同 2>&1 意思是把 标准错误输出 重定向到 标准输出. &>fil ...

  2. asp.net 导入

    开发项目过程中会遇到各种各样的项目需求,我现在遇到的问题是每个部门有不同的excel文件类型,他们每个部门每个文件类型上传成功之后都会在数据库中产生表,表的列名是你excel第一行数据,其他行作为表的 ...

  3. mapreduce (四) MapReduce实现Grep+sort

    1.txt dong xi cheng xi dong cheng wo ai beijing tian an men qiche dong dong dong 2.txt dong xi cheng ...

  4. 苦练SOC“基本功”启明星辰九年磨一剑

    2011年9月28日——10月31日,国内知名网络安全公司——启明星辰,作为协办方参与了51CTO在2011年举办的中国SOC安全管理平台市场应用现状调查. SOC(Security Operatio ...

  5. ZOJ-3597-Hit the Target!(线段树+扫描线)

    题解引自:http://www.cnblogs.com/wuyiqi/archive/2012/04/28/2474614.html 这题和着题解一块看,看了半天才看懂的....菜菜.... 题意:有 ...

  6. IGeometry 中取指定的点

    private static IGeometryCollection MakeMultiPoint(IGeometry geometry,int pointcount) {          IGeo ...

  7. 【转】Ansys 13.0 flexlm not running完美解决方案

    http://jingyan.baidu.com/article/af9f5a2dd9843a43150a4550.html 实测,12.1 用此方法问题同样得解.

  8. Java---网络编程(2)-UDP

    UDP ☆ UDP 将数据及源和目的封装成数据包中,不需要建立连接 每个数据报的大小在限制在64k内 因无连接,是不可靠协议 不需要建立连接,速度快 DatagramSocket和DatagramPa ...

  9. Java---类反射(2)---类反射加强

    经过前面的一篇博客,Java-类反射(1),相信大家对类反射有了一定的了解了. 下面来进行对类反射的加强,了解一下怎么通过类反射去new一个对象, 怎么通过类反射去访问其他类的方法. 怎么通过类反射去 ...

  10. HDOJ 1715 大菲波数

    Problem Description Fibonacci数列,定义如下: f(1)=f(2)=1 f(n)=f(n-1)+f(n-2) n>=3. 计算第n项Fibonacci数值. Inpu ...