python基础与高级特性(六):文件

本文详细介绍了Python中的文件操作,包括文件的概念、作用、打开与关闭的步骤,以及os、json和pickle模块的使用。重点讨论了文件的打开、读取和关闭方法,os模块的文件和目录操作,json模块的数据编解码,以及pickle模块对Python对象的序列化和反序列化。同时对比了JSON和pickle在数据类型处理和应用范围上的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.什么是文件?

在这里插入图片描述
思考:日常中的数据存储在纸上,而计算机的数据存储在哪里呢?------------->硬盘上

二.文件的作用

在这里插入图片描述
一个程序在运行过程中用了九牛二虎之力终于计算出了结果,试想一下如果不把这些数据存放起来,相比重启电脑之后,“哭都没地方哭了”。 默认数据是加载到内存中,结果也是保存到内存中, 程序执行结束,所有的数据释放。

三.文件的打开与关闭

在这里插入图片描述
宋丹丹拉高音调说:这个得分成三步,第一步打开冰箱;第二步,把大象塞进冰箱里;第三步,把冰箱关上。在操作文件的整体过程与将大象放入冰箱的过程是很相似的。

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序列化可能还有差异。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值