python—檔案處理
阿新 • • 發佈:2019-01-13
一、檔案處理流程
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