Python学习笔记(二):文件读写
来源:互联网 发布:淘宝hd打开怎么变横屏 编辑:程序博客网 时间:2024/05/22 13:02
一、魔数
这里的魔数并非程序猿随便定义的魔数。对于很多类型的文件,其起始的几个字节的内容是固定的(或是有意填充,或是本就如此)。根据这几个字节的内容就可以确定文件类型,因此这几个字节的内容被称为魔数 (magic number)。【百度百科】
在Python 中同样也可以使用魔数判断一个文件的类型,例如是否被压缩。例如以下代码:
import gzipimport pickle## global variableGZIP_MAGIC = b'\x1F\x8B' class Incident: def import_pickle(self, filename): try: fh = None fh = open(filename, 'rb') #Get the handle magic = fh.read(len(GZIP_MAGIC)) if magic == GZIP_MAGIC: #The file has been zipped fh.close() gzip.open(filename, 'rb') #Reopen the file with gzip else: fh.seek(0) #Adjust the handle to the beginning of the file ''' Deal with the file ''' return True except (EnvironmentError, pickle.UnpicklingError) as err: print("Error {0}".format(err)) return False finally: if fh is not None: fh.close()利用获取魔数与GZIP_MAGIC比对确定其文件是否被压缩,并选择打开文件的方式。一般来说,由于魔数没有统一的数据库,只能期望该魔数对于本程序是独一无二的,有时也会在文件类型的魔数后加入版本号。
PS:关于变量的作用域可参考http://www.crifan.com/summary_python_variable_effective_scope/
二、struct模块
struct模块用于处理将一些数据转化为二进制数据bytes对象。常用为struct.Struct类,struct.pack、struct.unpack函数。
1、struct.Struct类
该类储存struct的格式规范(format),大致格式为“<{个数}{标识符}”,例如"<H16s"。
1) “<”表示little-endian字节顺序(常用),也有时使用>。
2) 个数可以通过重复写标识符来实现,例如2H等价于HH
3) 常用标识符如下:
b:8位有符号整数
B:8位无符号整数
h:16位有符号整数
H:16位无符号整数
i:32位有符号整数
I:32位无符号整数
q:64位有符号整数
Q:64位无符号整数
f:32位浮点数
d:64位浮点数
?:布尔型
s:字节字符串
这种存储方式类似于C中的struct,Struct即定义了一个结构体,可以利用这个结构体构造不同的结构(二进制存储)
2、struct.pack与struct.unpack函数
这两个函数互为逆函数,可以通过相同的格式规范相互转化。其中bytespack(Structformat, **args)即接受一个格式规范和若干个数据,返回一个二进制串。items = unpack(Struct format,bytes data),unpack将pack得到的二进制串可以按照格式转化为一个元组item返回。例如:
TWO_SHORT = struct.Struct("<2h")data = TWO_SHORT.pack(11, -9)items = TWO_SHORT.unpack(data)
与下面的代码data = struct.pack("<2h", 11, -9) #dara = b'\x0b\x00\xf7\xff'items = struct.unpack("<2h", data) #items = (11, -9)
两代码完全等价,同时可以利用format函数来动态调整struct的格式。三、textwrap模块写入文本
主要利用testwrap中的TextWrapper类实现,可参考文章:《Python模块学习,textwrap文本包装与填充》
0 0
- Python学习笔记(二):文件读写
- Python学习笔记(3)--文件读写
- Python学习笔记--文件读写
- python学习笔记 文件读写
- 《python》学习笔记(Day1+)python中读写文件
- python文件读写实例学习笔记
- python 学习笔记 错误调试 文件读写
- 【Python学习笔记】IO编程:文件读写
- Python学习笔记——文件读写
- Python学习(文件读写)
- 【Python 笔记】文件读写
- Python 中的文件读写(二)
- 文件读写学习笔记
- 文件读写学习笔记
- 学习笔记---文件读写
- Python学习笔记之文件(二)
- <44>python学习笔记——读写csv文件
- Python学习笔记(18)-目录操作与文件读写
- 线性筛打素数表
- 技术是工具,软能力才是发展的加速器!
- illegal to have multiple occurrences of contentType with different values 解决
- OpenCV--边缘检测-Canny()-copyTo()
- openwrt中luci界面配置说明
- Python学习笔记(二):文件读写
- java实现C语言解释器:while 和 do while 循环的解释和执行
- 配对堆
- LeetCode461/485/476/412
- 解决警告: couldn't clear tomcat cache java.lang.NoSuchFieldException: resourceEntries
- requestAnimationFrame,Web中写动画的另一种选择
- 【Codeforces C Voting】
- 虚拟机中的centos没网络解决办法
- CSS3动画那么强,requestAnimationFrame还有毛线用?