众所周知计算机由应用程序、操作系统、硬件三部分结构。 python实现: 打开一个文件包含两个部分的资源:存储句柄的f占用的内存资源、操作系统打开的文件。在操作完毕一个文件时,这两部分的资源都必须回收。回收方法: 其中del f一定要发生在f.close()之后,否则就会导致操作系统打开的文件无法关闭,白白占用资源, 而python自动的垃圾回收机制决定了我们无需考虑del f,这就要求我们,在操作完毕文件后,一定要记住f.close(),虽然我们如此强调,但是大多数读者还是会不由自主地忘记f.close(),考虑到这一点,python提供了 with上下文时用来在代码块执行完文件操作后,自动关闭文件。 f = open(…)是由操作系统打开文件,如果打开的是文本文件,会涉及到字符编码问题, f = open(‘a.txt’,‘r’, 文件指针:总是指向需要操作的文件内容的某个地方。不同模式,开始时,文件指针指向不同的地方。 for line in f释疑: 文件内容: 小练习运行示例: 这个模式你如果想搞懂,你需要对文件指针有一个清楚的认识,你需要时刻清楚文件指针当前在哪个地方。 它们对文件内容都具有可读可写,那么有什么区别? r+模式代表以r为主体,读写都具有r的特点 db.txt文件原始内容: 执行结果: 结论: w+模式代表以w为主体,读写都具有w的特点 执行后文档: a+模式代表以a为主体,读写都具有a的特点 db.txt文件原始内容: 总结: 我们学习了上面三个+模式,发现w+模式和a+模式因为指针位置的问题,导致read功能相当于没有用,一直读的都是空白,r+模式因为指针位置问题,也会出现write添加内容之后,只能读部分内容。文章目录
一、引言
我们python或其他编程语言编写的程序和数据要想持久化保存,就必须保存到硬盘中。但是我们的应用程序不能直接对硬盘进行操作,操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,文件就是这个接口,应用程序可以通过操作文件实现对硬盘操作。二、python实现操作文件流程
1、操作文件的流程
- 打开文件,得到一个文件句柄并赋值给一个变量 - 通过句柄对这个文件进行操作 - 关闭文件
f = open('a.txt',mode='rt',encoding='utf-8') #打开文件得到句柄f print(f.read()) #读文件 f.close() #关闭文件
2、资源回收与with上下文管理
f.close() #回收操作系统打开的文件资源 del f #回收存储句柄的f占用的内存资源 #f如果先被删除了,那么你再无法使用f调用close方法关闭文件。
with关键字来帮我们管理上下文
:# 1、在执行完子代码块后,with 会自动执行f.close() with open('a.txt','w') as f: pass # 2、可用用with同时打开多个文件,用逗号分隔开即可 with open('a.txt','r') as read_f,open('b.txt','w') as write_f: data = read_f.read() write_f.write(data) #上面这个程序,实现了把一个文件复制到另外一个文件。
3、指定操作文本文件的字符编码
如果没有为open指定编码,那么打开文本文件的默认编码很明显是操作系统说了算了
,操作系统会用自己的默认编码去打开文件,在windows下是gbk,在linux下是utf-8。
这就用到了上节课讲的字符编码的知识:若要保证不乱码,文件以什么方式存的,就要以什么方式打开
。encoding='utf-8'
)三、文件操作模式
1、控制文件读写操作的模式
r(默认的):只读 w:只写 a:只追加写
2、r模式的使用
(1)r模式基本知识及使用案例
# r只读模式: 在文件不存在时则报错,文件存在,文件指针直接跳到文件开头,读取文件指针后的所有内容,不能写。 with open('a.txt',mode='r',encoding='utf-8') as f: res=f.read() # 会将文件的内容由硬盘全部读入内存,赋值给res # 小练习:实现用户认证功能 inp_name=input('请输入你的名字: ').strip() inp_pwd=input('请输入你的密码: ').strip() with open(r'db.txt',mode='r',encoding='utf-8') as f: for line in f: # 把用户输入的名字与密码与读出内容做比对 u,p=line.strip('n').split(':') if inp_name == u and inp_pwd == p: print('登录成功') break else: print('账号名或者密码错误')
对文件对象进行for循环遍历,是将文件中的内容一行行的以字符串赋值给line变量
(2)read方法使用:
f.read() #读取所有内容,执行完该操作后,文件指针会移动到文件末尾 f.readline() #读取一行内容,光标移动到第二行首部 f.readlines() #把文件内容每行作为元素存在一个列表中
f.read():
f.readline():
f.readlines():
看完三面三个运行结果,有人就有疑问了,为什么readlines方法的运行结果多了个n
?答:文件内容和你看到的并不一样,电脑存储文件的样子实际时这样子的: wjc:123nhaha:456nheihei:789 #注:每个n隶属于前面的,因为你打字,是在当前行的结尾换行的(即当前行结尾处输入换行符的)
3、w模式的使用
# w只写模式: 在文件不存在时会创建空文档,文件存在会清空文件,文件指针跑到文件开头,不能读。 with open('db.txt',mode='w',encoding='utf-8') as f: f.write('吴晋丞:123n') f.write('xixi:adminn') f.write('wowo:456n') f.write('吴晋丞:123nxixi:adminnwowo:456') #强调: # 1 在文件不关闭的情况下,连续的写入,后写的内容一定跟在前面写内容的后面 # 2 如果重新以w模式打开文件,则会清空文件内容
4、a 模式的使用
# a只追加写模式: 在文件不存在时会创建空文档,文件存在会将文件指针直接移动到文件末尾,不能读。 with open('c.txt',mode='a',encoding='utf-8') as f: f.write('44444n') f.write('55555n') #强调 w 模式与 a 模式的异同: # 1 相同点:在打开的文件不关闭的情况下,连续的写入,新写的内容总会跟在前写的内容之后 # 2 不同点:以 a 模式重新打开文件,不会清空原文件内容,会将文件指针直接移动到文件末尾,新写的内容永远写在最后 # 小练习:实现注册功能: username = input('username>>>: ').strip() password = input('password>>>: ').strip() with open('db.txt', mode='a', encoding='utf-8') as f: info = '{name}:{pwd}n'.format(name=username,pwd=password) f.write(info) # 注册我们不可能使用w模式,清空写是吧,需要追加写!
为什么没有换行呢?
答:我们在w模式时,最后一个输入的字符串没有加n,所以接下来写入的时候,还是从当前行写走。
5、+ 模式的使用(了解)
# r+ w+ a+ :它们都是代表对文件内容具有可读可写 #在平时工作中,我们只单纯使用r/w/a,要么只读,要么只写,一般不用可读可写的模式
(1)r+模式的使用
r的特点:不存在文件时,无法读文件,报错;文件存在,从文件内容开始的地方,开始读。
r+模式的写操作案例:with open('db.txt', mode='r+', encoding='utf-8') as f: f.write('heihei') info = f.read() print(info)
haha:123 xixi:admin wowo:456
执行后db.txt文件的内容:
疑问:为什么read读出来的内容和执行命令后的db.txt文件内容不一致?
答:因为write写操作写完,文件指针便不再是指到文件内容开头了,文件指针此时指向write的内容末尾,r模式我们晓得read只是读取文件指针之后的内容,所以只能打印write的内容末尾后面的内容,不能打印出来前面刚写入的内容。
(2)w+模式的使用
w的特点:在文件不存在时会创建空文档,文件存在会清空文件,文件指针跑到文件开头。
w+模式的读操作案例:with open('db.txt', mode='w+', encoding='utf-8') as f: info = f.read() print(info)
即使你再添加内容,文件指针也一直是在文末,read永远都读的都是空白。
总结:
(3)a+模式的使用
a的特点:在文件不存在时会创建空文档,文件存在会将文件指针直接移动到文件末尾
a+模式的读操作案例:with open('db.txt', mode='a+', encoding='utf-8') as f: f.write('haha') info = f.read() print(info)
执行后文件的内容:
运行结果:
a+模式中read操作一直都是空白的,这是为什么呢?
答:因为有文件,文件指针就直接跳到文末,即使添加内容,也是追加,文件指针一直指向文末,所以read从文件指针往后读,不论怎样都是空白的
6、+模式整体总结
因此我们需要可以控制指针的移动,这个会在后面学习到。
四、控制文件读写内容的模式
1、t模式的使用
# t 模式:如果我们指定的文件打开模式为r/w/a,其实默认就是rt/wt/at with open('a.txt',mode='rt',encoding='utf-8') as f: res=f.read() print(type(res)) # 输出结果为:<class 'str'> with open('a.txt',mode='wt',encoding='utf-8') as f: s='abc' f.write(s) # 写入的也必须是字符串类型,传整型、浮点型等都不行。 #强调:t 模式只能用于操作文本文件,无论读写,都应该以字符串为单位,而存取硬盘本质都是二进制的形式,当指定 t 模式时,内部帮我们做了编码与解码,所以我们需要指定编码格式,不然可能会出现乱码
2、b模式的使用
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算