python从入门到坚持
一.什么是文件?
思考:日常中的数据存储在纸上,而计算机的数据存储在哪里呢?------------->硬盘上
二.文件的作用
一个程序在运行过程中用了九牛二虎之力终于计算出了结果,试想一下如果不把这些数据存放起来,相比重启电脑之后,“哭都没地方哭了”。 默认数据是加载到内存中,结果也是保存到内存中, 程序执行结束,所有的数据释放。
三.文件的打开与关闭
宋丹丹拉高音调说:这个得分成三步,第一步打开冰箱;第二步,把大象塞进冰箱里;第三步,把冰箱关上。在操作文件的整体过程与将大象放入冰箱的过程是很相似的。
1.文件的打开
(1)在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件。
open(文件名,访问模式) e.g. f = open(‘test.txt’, ‘w’)
如果文件不存在那么创建,如果存在那么就先清空,然后写入数据
要读取二进制文件,比如图片、视频等等,用’rb’, ‘wb’, 'ab’等模式打开文件即可。
(2)File对象的属性
(3)File对象的常用方法
2.文件的读取
(1)seek(offset, from)有2个参数:
offset:偏移量
from:方向 0:表示文件开头; 1:表示当前位置; 2:表示文件末尾
f.seek(0, 5) #1). 把位置设置为:从文件开头,偏移5个字节
f.seek(2, 3) #2). 把位置设置为:离文件末尾,3字节处
3.文件的关闭
(1)调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:
f.close()
(2)Python引入了with语句来自动帮我们调用close()方法:
with语句的工作原理:python中的with语句使用于对资源进行访问的场合,保证不管处理过程中是否发生错误或者异常都会自动执行规定的(“清理”)操作,释放被访问的资源,比如有文件读写后自动关闭、线程中锁的自动获取和释放等。
with open('/path/to/file' , 'r') as f:
print(f.read())
with open('doc/passwd') as f:
print("with语句里面:", f.closed)
print(f.read(10))
print("with语句外面:", f.closed)
4.os模块
(1)os模块:
os:语义为操作系统,处理操作系统相关的功能,可跨平台。 比如显示当前目录下所有文件/删除某个文件/获取文件大小……
(2)关于路径
(3)关于文件与目录操作
5.json模块
(1)json模块详解
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
(2)python类型数据和JSON数据格式互相转换规则
python 中str类型到JSON中转为unicode类型,None转为null,dict对应object;
pyhton中的集合不能转成json格式。
(3)数据类型编解码
dump: 将对象序列化并保存到文件
load: 将序列化字符串从文件读取并反序列化
(4)序列化及反序列化常用参数
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding=“utf-8”, default=None,sort_keys=False, **kw)
ensure_ascii=False: 中文存储需要设定
indent=4: 增加缩进,增强可读性,但缩进空格会使数据变大
separators=(’,’,’:’): 自定义分隔符,元素间分隔符为逗号, 字典key和value值的分隔符为冒号
sort_keys=True: 字典排序
(5)自定义复杂数据类型编解码
例如我们碰到集合对象, datetime对象,或者自定义的类对象等json默认不支持的数据类型时,我们就需要自定义编解码函数。有两种方法来实现自定义编解码。
6.pickle模块
python的pickle模块实现了python的所有数据序列和反序列化。与JSON不同的是pickle不是用于多种语言间的数据传输,它仅作为python对象的持久化或者python程序间进行互相传输对象的方法,因此它支持了python所有的数据类型。
cPickle是pickle模块的C语言编译版本相对速度更快。
7.JSON和pickle模块的区别
(1)JSON只能处理基本数据类型。pickle能处理所有Python的数据类型。
(2)JSON用于各种语言之间的字符转换。pickle用于Python程序对象的持久化或者Python程序间对象网络传输,但不同版本的Python序列化可能还有差异。