Day 09 文件处理
什么是文件
文件就是操作系统提供的虚拟单位
绝对路径与相对路径
- 绝对路径是从盘符开始的路径
- 相对路径是当前执行文件所在的文件夹开始找
文件打开的三种模式
如果我们需要打开一个文件,需要向操作系统发起请求,要求操作系统打开文件,占用操作系统资源。Python中使用open()方法可以打开某个具体的文件,open()方法内写入文件路径。
open('E:\typora\Note\Class\Day09\user_info.txt')
打开文件之后,文件不仅占用了内存,他还对应了操作系统打开的以文件,相当于使用文本编辑器打开了一个文件。并且我们说了我们操控文件只是为了读和写,因此打开文件并不是目的,读和写才是目的,接下来我们尝试如何读写文件。
文件打开模式之r模式
r:read,只读模式,只能读不能写,文件不存在时报错
f = open('user_info.txt', mode = 'r', encoding='utf8')
print(f.readable())
print(f.writable)
f.close()
True
False
f = open('user_info.txt', mode = 'r', encoding='utf8')
data = f.read()
print(data)
f.close()
tiny 123
f.read()读取文件指针会跑到文件的末端,如果再一次读取,读取的将是空格。
f = open('user_info.txt', mode = 'r', encoding='utf8')
data1 = f.readline() # 读取一行
data1 = f.readlines() # 一行一行的读取
f.close()
文件打开模式之w模式
w:write,只能写,不能读,文件已存在会清空文件再写入数据;文件不存在的时候会创建文件后写入数据
f = open('user_info.txt', mode = 'w', encoding='utf8')
print(f.readable())
f.write('tiny,你好帅啊')
f.flush() ## 快速保存
f.close()
False
f = open('user_info.txt', mode = 'r', encoding='utf8')
data = f.read()
print(data)
f.close()
tiny,你好帅啊
文件打开模式之a模式
a:append,只能追加,不能读,在文件的末端追加写入内容;文件不存在的时候会创建文件追加写入内容
f = open('user_info.txt', mode = 'a', encoding='utf8')
print(f.readable())
f.write('tiny,233')
f.write(' tiny')
f.close()
False
f = open('user_info.txt', mode = 'r', encoding='utf8')
print(f.read())
tiny,你好帅啊tiny,233 tiny
文件打开的两种方式
t方式,也就是文本的大开方式一般与三种打开模式连用,可以省略不写,事实上上面的'r'
,'w'
,'a'
模式都是把t省略了
还有一中方是b(bytes)方式,是以二进制的方式来打开文件,一般用来打开图片/音频/视频,b模式读取文件,一定不能加上encoding参数,因为二进制无法再编码
with管理文件上下文
上面我们用open()的方法来打开文件,但是每次处理文件需要用到close()才能手动释放文件对操作系统的占用,
下面介绍一下更简单的方法,利用with open()管理文件上下文.
with open('user_info.txt', 'rt', encoding='utf8') as f:
print(f.read())
tiny 123
with open()方法不仅提供自动释放操作系统占用的方法,并且with open可以使用逗号分隔,一次性打开多个文件,实现文件的快速拷贝.
with open('user_info.txt', 'rb') as fr, \
open('xxx.txt', 'wb') as fw:
f.write(f.read())
文件的高级应用
可读、可写
- r+t:可读、可写
- w+t:可写、可读
- a+t:可追加、可读
文件内指针移动
- seek(offset,whence):offset代表指针的偏移量,偏移量的单位是字节,whence可以为0,1,2,0 表示从文件头开始,1 表示当前文件所在位置,3 相当于文件末尾
- tell():每次统计都是文件开头到当前指针所在位置
- read(n):只有read()的n表示字符字符个数,从文件头开始读取n个字符
- truncate():截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate()要在r+或a或a+等模式下测试效果。它的参照物永远是文件头。并且truncate()不加参数,相当于清空文件
文件的两种修改方式
文件的数据是放在硬盘上的,因而只存在覆盖,不存在修改这么一说,我们平时看到的修改文件,都是模拟出来的效果,具体的说有两种实现方式
方式一
with open('user_info.txt', 'r', encoding='utf8') as fr:
data = fr.read()
data = data.replace('tiny', 'Tiny')
with open('user_info_change.txt', 'w', encoding='utf8') as fw:
fw.write(data);
import os
# 删除原文件
os.remove('user_info.txt')
# 重命名
os.rename('user_info_change.txt', 'user_info.txt')
方式二
with open('user_info.txt', 'r', encoding='utf8') as fr: \
with open('user_info_change.txt', 'w', encoding='utf8') as fw:
for i in fr:
data = i.replace('tiny', 'Tiny')
fw.write('data')
# 删除原文件
os.remove('user_info.txt')
# 重命名
os.rename('user_info_change.txt', 'user_info.txt')