文件处理流程:
(1)打开文件,得到文件句柄并赋值给一个变量
(2)通过句柄对文件进行操作
(3)关闭文件
1. 文件读取操作(默认模式,文件必须存在,不存在则抛出异常) r f = open ('jiao ','r',encoding = 'utf8')
注:此处当文件再统同一路径下,可以直接写文件名,否则应写文件的绝对路径
(1)f.read () 读取文件全部内容,括号内传入参数 x 则表示读取 x 个字符
f = open('jiao','r',encoding = 'utf-8') 打开一个文件,编码方式为‘utf-8’ (存在硬盘上的文件默认为 utf-8编码方式,windows系统读取文件为gbk编码,而open函数会检索系统编码方式并应用
data=f.read()
print(data)
f.close())
(2)f.readline()从光标处开始读取文件一行的内容 如果在此之前文件执行过 f.read() 即全部读取过,则再执行此语句运行结果为空
(3)f.readlines()从光标处开始读取文件所有内容并放在一个列表中
(4)f.readable()判断文件是否可读返回True 或者False
2.文件写操作(不可读,不存在则创建,存在则清空内容) w f = open('jiao', 'w',encoding = 'utf8')
(1)f.write() 从光标出开始写入内容,括号中必须以字符串的形式传入
(2)f.writeable() 判断文件是否可写入,返回True 或者False
(3)f.writelins() 从光标处开始写入内容,括号内以列表的形式传入,列表内必须全都是字符串,也可以是字符串
注:如果打开的文件有内容在进行 f.write 操作,则新写入的内容会覆盖源文件第一行的内容,因为文件打开贯标停在开始的位置,而写入是从光标出开始的
若要避免这种情况,可以先以读的方式打开这个文件,读取内容,再用写的方式打开这个文件进行操作
src_f = open('jiao','r',encoding = 'utf8')
data = src_f.readlines()
src_f.close()
dst_f = open('jiao','w',encoding='utf8')
dst_f.writelines(data[0])
dst_f.close()
上述代码实则模拟了系统中对文件进行修改(修改操作为删除文件‘jiao’除第一行外的全部内容)的操作,文件并不是真的被修改,二十被新的文件所覆盖
(4)f.closed 判断文件是否关闭
(5)f.flash() 刷新,将写到文件中的内容保存到硬盘中
3.追加操作(可读,不存在则创建,存在则只追加内容) a f = open('jiao' ,'a',encoding = 'utf8')
‘+’表示可以同时读写某个文件
4. r+ 读写 (可读、可写) f = open ('jiao','r+','utf8')
(1)f.tell() 返回当前光标位置,按字节计数(只有以read(read(3)代表读三个字符)进行读操作时,才是按字符进行计数,其余都是以字节为移动单位)
(2)f.seek() 控制光标的移动,默认不论执行几次,都是从文件开始位置算
f = open('jiao','r+',encoding = 'utf8')
print(f.tell())
print(f.seek(10))
print(f.tell())
print(f.seek(3))
print(f.tell())
运行结果:
0 10 10 3 3
当使用seek(x,1)时,是从当前光标的位置开始移动,但此时应以b的模式打开文件
f = open('jiao','rb') print(f.tell()) print(f.seek(10)) print(f.tell()) print(f.seek(3,1)) print(f.tell()) 运行结果: 0 10 10 13 13
当使用seek(x,2)时,是从最后一个光标位置开始移动(从后往前移动),此时x应给为负数
(3)f.truncate() 截取 f.truncate(10) 截取十个字节的内容(可在w模式、a+模式,r+模式下应用,但是不能在w+模式下用,因为w+模式代开文件,
之前的内容会被清除,即无内容可截)
5.w+ 写读(可读、可写)
6.a+ 写读(可读、可写)
7.with with open('jiao','w') as f:
与open的区别是:open打开文件进行操作后必须以close结尾将文件关闭,而用with时不需要
with可同时打开两个文件
with open('jiao','r',encoding = 'utf8') 此处斜杆是为了避免一行的代码过长因此换行写,不加斜杆会报错
open('jiao_new','w',encoding = 'utf8'):
8.文件处理模式b模式 (b的方式不能指定编码,因为b模式就是在对原生编码(二进制)进行操作) b模式下传入、传出的都是字节
(1)f = open('jiao','rb',) 读操作
f = open('jiao','rb') data=f.read() print(data) print(data.decode('utf8')) 读出来的是字节形式,想要看到正常内容需要对其解码 f.close()
(2)f = open('jiao','wb') 写操作 以‘wb’模式进行写处理,写入的是字节形式,
f = open('jiao','wb') f.write(bytes('11111 ',encoding = 'utf8')) 以‘wb’模式进行写处理,写入的是字节形式,字符串以字节形式写入,中间需要经过编码,转化为字节
f.write('guagua'.encode('utf8'))
f.close()
(3)f = open('jiao','ab') 追加操作
9.循环文件的方式 for i in f:
f = open('jiao','wb')
f.write(bytes('11111 ',encoding = 'utf8'))
f.close()