python—文件处理
一、文件处理流程
1、打开文件,得到文件句柄并赋值
2、通过句柄对文件进行操作
3、关闭文件
二、文件打开模式
1、r,只读,默认模式
2、w,只写
3、a,追加
4、 r+、w+、x+、a+ ,可读可写
## 模式 r—只读 默认只读 f = open('冲鸭','r',encoding='utf-8') data = f.read() print(data) ## 是否可读,返回布尔 print(f.readable()) # 一次读一行 print('第一行',f.readline()) print('第二行',f.readline()) ## 一次读出多行,放在一个列表中 print(f.readlines()) ## ['人家刚刚就很尴尬法规和\n', 'wefrdferwfer'] f.close()
## 模式 w—只写 ## 若文件存在,清空文件 ## 若文件不存在,运行后新建文件 ## 写的文件内容 是str类型 f = open('冲鸭','w',encoding='utf-8') f.write('sdcdcd\n') f.write('dsfedf\ndsdds\nsdsx\n') ## 是否可写 f.writable() ## f.writelines(['2222\n','dsssd\n']) f.close()
## 模式 a—追加 f = open('冲鸭','a',encoding='utf-8') f.write('写在文件最后') f.close()
## 读取文件中真正的换行符号 \r\n f = open('a.txt','r',encoding='utf-8',newline='') print(f.readlines())
3、文件修改
## 修改文件内容(先读后写,覆盖文件内容) src_f = open('冲鸭','r',encoding='gbk') data = src_f.readlines() src_f.close() dst_f = open('冲鸭','w',encoding='gbk') dst_f.write(data[0]) dst_f.close()
4、with open .... as ... 打开方式
## 另一种打开方式 with open('冲鸭','r',encoding='gbk') as f: print (f.read()) with open('冲鸭','r',encoding='gbk') as src_f,\ open('冲鸭_new','w',encoding='gbk') as dst_f: data = src_f.read() dst_f.write(data)
5、b+方式,以字节打开
## b的方式打开不能指定编码 ## 字符串-----encode------》bytes ## bytes------decode-----》字符串 f = open('冲鸭','rb') data = f.read() print(data.decode('utf-8')) f = open('冲鸭','wb') f.write('啦啦'.encode('utf-8'))
6、方法
f = open('a.txt','r',encoding='utf-8') ## tell() 当前光标位置 print(f.tell()) ### 0 f.readline() print(f.tell()) ### 7 以字节方式,1个汉字3个字节,换行\r\t 2个字节 ## seek() 控制光标的移动(字节) f.seek(3) print(f.tell()) ## 1 ## read() 读取一个字符 print(f.read(1))
## truncate() 截取(字节方式) 不能以w+方式打开,会清空文件 f = open('a.txt','r+',encoding='utf-8') f.truncate(10)
7、seek()方法:移动光标
## seek() 移动光标位置 ## seek(10,n) 10--移动10个字节位置,换行\r\t 是2个字节 ## n—0,默认从开头开始;1—从当前光标位置开始;2—从结尾开始 f = open('a.txt','rb') print(f.tell()) f.seek(-10,2) print(f.tell())
f = open('a.txt','rb') ## 循环文件方式 for i in f: print(i.decode('utf-8')) ## 读取文件最后一行 ## 循环文件方式 for i in f: offs = -10 while True: f.seek(offs,2) data = f.readlines() if len(data) > 1: print('文件最后一行的内容为:',data[-1].decode('utf-8')) break offs *= 2