python—文件處理
阿新 • • 發佈:2019-01-13
data n) with open 不存在 最後一行 光標 pytho odi 清空
一、文件處理流程
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
python—文件處理