(1)文件的写入和读取
首先在python3中操作文件只有一种选择,那就是open()
而在python2中则有两种方式:file()与open() 两者都能够打开文件,对文件进行操作,也具有相似的用法和参数,
但是,这两种文件打开方式有本质的区别,file为文件类,用file()来打开文件,相当于这是在构造文件类,而用open()打开文件,是用python的内建函数来操作,我们一般使用open()打开文件进行操作,而用file当做一个类型,比如type(f) is file
语句格式
with open(filename,mode='r',encoding='utf-8') as file: #通过关键词with 和open函数以指定模式和字符格式打开并赋值给一个变量
with关键词 #会自动执行一个close()的动作,即程序结束自动关闭文件进行保存
open() #是一个打开函数,用来做文件打开动作
filename #是文件名或者文件路径
mode #是打开的模式
encoding #指定读取文件的模式 PS:文本文件打开时一定要指定字符串的打开模式
as #也是关键词
file #是一个变量
打开文件的模式有
(默认为文本模式,t模式):
r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
w,只写模式【不可读;不存在则创建;存在则清空内容】
a, 之追加写模式【不可读;不存在则创建;存在则只追加内容】
PS:对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
rb #以bytes的模式只读打开
wb #以bytes的模式复写
ab #以bytes的模式追加
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
例:with open('e.txt',mode='wb') as f:
f.write('你好啊\n'.encode('utf-8') #这里在用b模式写入时,必须编码成指定的格式写入磁盘
文件内的指针移动(就是在打开或者写入的时候指定在哪个位置打开或者写入)
主动控制文件内指针的移动
seek(参数1,参数2) #如果用参数的值是2,则光标移动到指针末尾,这时候参数1要指定从末尾往前读多少个字节,则必须是 - number开始,而不能是正number
参数1: 控制的移动的字节个数
参数2: 控制参照的位置
0(默认的):参照文件开头
1:参照指针当前所在位置
2:参照指针文件末尾
PS:强调:只有0模式可以在普通模式下使用,1和2模式只能在b模式下使用
例:with open('e.txt',mode='rb') as f:
f.seek(6,0)
f.read(3)
f.seek(3,1)
print(f.tell())
print(f.read().decode('utf-8'))
f.seek(-8,2)
print(f.read().decode('utf-8'))
f.seek(0,2)
print(f.tell())
了解部分
"+" 表示可以同时读写某个文件
r+, 读写【可读,可写】 #r模式的特性就是只读并不存在擦除或者覆盖的功能,那么读写模式就是在写入时候将内容添加到了文件的末尾
w+,写读【可读,可写】 #w模式的特性就是先擦除在写入,所以使用w+模式打开的时候就是先把文件清空了,再写入新内容,只是给写入模式增加了一个读取的功能而已
a+, 写读【可读,可写】 #a模式的特性就是追加,并不会像w模式这样擦除原内容,所以也就是给追加模式添加了一个读取模式
x, 只写模式【不可读;不存在则创建,存在则报错】
x+ ,写读【可读,可写】
读写文件的一些操作
f.read() #读取所有内容,光标移动到文件末尾
f.readline() #读取一行内容,光标移动到第二行首部
f.readlines() #读取每一行内容,存放于列表中
f.write('1111\n222\n') #针对文本模式的写,需要自己写换行符
f.write('1111\n222\n'.encode('utf-8')) #针对b模式的写,需要自己写换行符
f.writelines(['333\n','444\n']) #文件模式
f.writelines([bytes('333\n',encoding='utf-8'),'444\n'.encode('utf-8')]) #b模式
f.readable() #文件是否可读
f.writable() #文件是否可读
f.closed #文件是否关闭
f.encoding #如果文件打开模式为b,则没有该属性
f.flush() #立刻将文件内容从内存刷到硬盘 f.name
关于read
1. 文件打开方式为文本模式时,代表读取3个字符
2. 文件打开方式为b模式时,代表读取3个字节
其余的文件内光标移动都是以字节为单位如seek,tell,truncate
PS:seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的
PS:truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果
seek有三种移动方式
0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的
truncate是截断文件
所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果