文件处理

一、 引入
二 、文件操作的基本流程
三、文件的操作模式
四、操作文件的方法
五、主动控制文件内指针移动

一、引入:
应用程序运行过程中产生的数据最先都是存放于内存中的,若想永久保存下来,则必须要保存到硬盘中。应用程序若想操作硬件必须通过操作系统,而文件就是操作系统提供给应用程序来操作硬盘的虚拟概念,用户或应用程序对文件的操作,就是向操作系统发起调用,然后由操作系统对硬盘的具体操作。

二、文件操作基本流程

2.1基本流程:

1.打开文件,由应用程序向操作系统发起系统调用open(…),操作系统打开该文件,对应一块硬盘空间,并返回一个文件对象赋值给一个变量f。
2.调用文件下的读/写方法,会被操作系统转换为读/写硬盘操作。
3.向操作系统发起关闭文件的请求,回收系统资源。
f=open(‘a.txt’,‘r’,encoding=‘utf-8’)
data=f.read()
f.close()

2.2 资源回收与with上下文管理

2.2.1、在打开文件运行完关闭时,一定要资源回收

f.close() #回收操作系统打开的文件资源
del f #回收应用程序级的变量
注意:一定要f.close()在前, del f 在后,否则会导致操作系统打开的文件无法关闭,白白占用资源。

2.2.2、python有自动的垃圾回收机制,无需 del f 操作,只要记住f.close().
python提供了with关键字来帮我们管理上下文

1.在执行完子代码块后,with 会自动执行 f.close()
with open(‘a.txt’,‘r’) as f :

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)

2.2.3、指定操作文本文件的字符编码

f=open(…)是由操作系统打开文件,如果打开的是文本文件,会涉及到字符编码问题,如果没有为open指定编码,那么打开文本文件默认编码就是操作系统说了算,操作系统会用自己的默认编码去打开文件:
在windows下是gbk,在Linux下是utf-8
若要保证不乱码,文件以什么方式存的,就要以什么方式打开。
f = open (‘a.txt’,‘r’,encoding=‘utf-8’)

三、文件的操作模式

3.1、控制文件读写操作的模式

r: 只读
w:只写
a:只追加写

3.1.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’a.txt’,mode=‘r’,encoding=‘utf-8’) as f :
for line in f:
…u,p = line.srtip(’\n’).split(’:’)
…if inp_name == u and inp_pwd == p :
…print(‘登陆成功’)
…break
else:
…print(‘账号或密码错误’)

3.1.2、案例二:w模式的使用

w只写模式:在文件不存在时会创建空文档,文件存在时则会清空文件,文件指针跑到文件头。
with open (‘a.txt’,mode=‘w’,encoding=‘utf-8’) as f :
…f.write(‘hello\n’)
…f.write(‘hi\n’)
…f.write(‘how are you\n’)
…f.write(‘fine thank you\n’)
注意:
在文件不关闭的情况下,连续的写入,后写的内容一定跟在前写内容的后面
如果重新以w模式打开文件,则会清空文件内容

3.1.3、案例三:a模式的使用

a 只追加写模式:在文件不存在的时候会创建空文件,文件存在则将文件指针直接移动到文件尾部。
with open(‘a.txt’,mode=‘a’,encoding=‘utf-8’) as f :
…f.write(‘hello\n’)
…f.write(‘fine\n’)
w模式与a模式的区别:
相同点:在打开文件不关闭的情况下,连续写入,新的内容总会跟在前写内容之后
不同点:以a模式重新打开文件,不会清空源文件,会将指针移到文件末尾,新写的内容永远在后面。

小练习:注册功能
name=input(‘输入你的名字:’).strip()
pwd=input(‘输入你的密码:’).strip()
with open (‘a.txt’,mode=‘a’,encoding=‘utf-8’) as f:
…info=’%s:%s’ % (name,pwd)
…f.write(info)

3.1.4、+模式的使用

r+ w+ a+:可读可写

3.2、控制文件读写内容的模式

前提:tb模式均不能单独使用,必须与r/w/a之一结合使用
t(默认的):文本模式
…1.读写文件都是以字符串为单位的
…2.只能针对文本文件
…3.必须指定encoding参数
b:二进制模式
…1.读写文件都时以bytes/二进制为单位的
…2.可以针对所有文件
…3.一定不能指定encoding参数

3.2.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 模式时,内部帮我们做了编码与解码。

3.2.2、案例二:b 模式的使用

b模式是以二进制的形式进行读写操作,像图片,视频,歌曲等这些内容都需要用b模式来完成。

五、主动控制文件内指针移动

指针的移动单位都是以bytes/字节为单位
t 模式下的read(n),n是代表字符个数,即读出来n个字符
除了 t 模式之外都是bytes/字节为单位读取内容。

f,seek(3,0)
0代表参照文件开头,即在文件开头往后读3个bytes
f.seek(-3,2)
2代表参照文件末尾,即在文件末尾往前读3个bytes
0:参照物是文件开头位置。
1:参照物是当前指针所在位置。
2:参照物永远是文件末尾位置。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值