文件处理流程
1.打开文件,得到文件句柄并赋值给一个变量
2.通过句柄对文件进行操作
3.关闭文件
f=open('test.txt',encoding='gbk') data = f.read() print(data) f.close()
w+每次打开文件,都会清空之前的内容,若文件不存在,则会自动创建
r+会在之前的基础上追加内容,但是不会创建文件
所以两个可以一起用,用之前判断一下文件是否存在,如下
读取文件:
#r代表只读 w代表只写 a代表只追加 #默认打开文件是只读模式 f=open('test.txt','r',encoding='gbk') data = f.read() print(data) f.close()
print(f.readable())#返回bool文件是否可读 print('第一行',f.readline(),end='')#读每一行 print('第二行',f.readline()) print('第三行',f.readline()) print(f.readlines())
写文件:
文件内容只能是字符串模式
f=open('zzz','w',encoding='utf-8') f.write('111111111111\n') f.write('2222222222222222\n') f.writelines(['333\n','444\n']) f.close()
追加:
f=open('zzz','a',encoding='utf-8') f.write('写到文件最后') f.close()
写文件都是从光标处开始写,若不读文件,则光标在第一行顶头
数据本质上都是覆盖,没有改写
#修改文件第一行 f=open('a.txt','r') data=f.readlines() print(data) f.close() d=open('a.txt','w') d.write(data[0]) d.close()
with关键字:
with open('a.txt','w') as a: a.write('1111\n2222')
相当于打开文件对文件进行操作后关闭文件
with open('a.txt','r') as a,\ open('xxx','w') as b: data=a.read() b.write(data)
以字节方式操作文件
Windows平台中,\r\n为回车
Linux平台中,\n为回车
#'字符串'---------encode编码--------->>>bytes
#bytes---------decode解码--------->>>'字符串'
二进制方式读:
# f=open('a.txt','rb',encoding='utf-8')#b的方式不能执行编码 f=open('a.txt','rb') data=f.read() print(data) #'字符串'---------encode--------->>>bytes #bytes---------decode--------->>>'字符串' print(data.decode()) f.close()
二进制方式写:
f=open('zzz','wb') #f.write('1111\n')#报错 x='1111\n' y=bytes(x,encoding='utf-8') f.write(y) z=x.encode('utf-8') f.write(z) f.close()
open()默认参数:
Character Meaning --------- --------------------------------------------------------------- 'r' open for reading (default) 'w' open for writing, truncating the file first 'x' create a new file and open it for writing 'a' open for writing, appending to the end of the file if it exists 'b' binary mode 't' text mode (default) '+' open a disk file for updating (reading and writing) 'U' universal newline mode (deprecated)
文件操作的其他方法:
f.closed返回bool值表示文件是否关闭
f.encoding查看使用open打开文件时的编码
f.flush()刷新,将内存中数据保存到硬盘
注意:read(3)代表读取3个字符,其余的文件内光标移动都是以字节为单位如:seek,tell,truncate
f.tell()返回光标当前位置
f=open('a.txt','r',encoding='utf-8',newline='')#newline=''读取文件中真正的换行符号
f.seek()控制光标的移动,seek(a,b)第一个参数表示相对上一次移动的字节,第二个参数为0表示从文件开头开始计算,为1从上一次光标停的位置计算,为2从末尾开始计算,且此时第一个参数需加-号,第二个参数是1,2时需指定文件以b的方式打开
#读取文件最后一行,下面的第一种方法会加大内存,拖慢速度,相当于把整个文件都读取并缓存到内存中 f=open('a.txt','r+',encoding='utf-8') data=f.readlines() print(data[-1]) >>>2019/3/27 她做了sb一件事情 #################### f=open('a.txt','rb') for i in f: offs=-10 while True: f.seek(offs,2) data=f.readlines() if len(data)>1: print('文件的最后一行是:%s'%data[-1].decode('utf-8')) break offs*=2 >>>文件的最后一行是:2019/3/27 她做了sb一件事情
f.truncate(10)从开头开始算,将文件只保留从0-10个字节的内容,文件必须以写的方式打开,w和w+除外
#循环文件的推荐方式: f=open('') for i in f: ......