Python全棧學習筆記day 8: 檔案操作基本流程、檔案的開啟模式
阿新 • • 發佈:2018-12-10
一,檔案操作基本流程。
#1. 開啟檔案,得到檔案控制代碼並賦值給一個變數 f=open('a.txt','r',encoding='utf-8') #預設開啟模式就為r #2. 通過控制代碼對檔案進行操作 data=f.read() #3. 關閉檔案 f.close()
二、關閉檔案的注意事項:
開啟一個檔案包含兩部分資源:作業系統級開啟的檔案+應用程式的變數。在操作完畢一個檔案時,必須把與該檔案的這兩部分資源一個不落地回收,回收方法為: 1、f.close() #回收作業系統級開啟的檔案 2、del f #回收應用程式級的變數 其中del f一定要發生在f.close()之後,否則就會導致作業系統開啟的檔案還沒有關閉,白白佔用資源, 而python自動的垃圾回收機制決定了我們無需考慮del f,這就要求我們,在操作完畢檔案後,一定要記住f.close() 雖然我這麼說,但是很多同學還是會很不要臉地忘記f.close(),對於這些不長腦子的同學,我們推薦傻瓜式操作方式:使用with關鍵字來幫我們管理上下文
with open('a.txt','w') as f:
pass
with open('a.txt','r') as read_f,open('b.txt','w') as write_f:
data=read_f.read()
write_f.write(data)
三,檔案的開啟模式
#1. 開啟檔案的模式有(預設為文字模式):
r ,只讀模式【預設模式,檔案必須存在,不存在則丟擲異常】
f = open('d:\模特主婦護士班主任.txt',mode='r',encoding='UTF-8') content = f.read() print(content) f.close()
w,只寫模式【不可讀;不存在則建立;存在則清空內容】
f = open('log',mode='w',encoding='utf-8')
f.write('騎兵步兵')
f.close()
a, 只追加寫模式【不可讀;不存在則建立;存在則只追加內容】
f = open('log',mode='a',encoding='utf-8')
f.write('佳琪')
f.close()
#2. 對於非文字檔案,我們只能使用b模式,"b"表示以位元組的方式操作(而所有檔案也都是以位元組的形式儲存的,使用這種模式無需考慮文字檔案的字元編碼、圖片檔案的jgp格式、視訊檔案的avi格式)rb
f = open('模特主婦護士班主任',mode='rb',)
content = f.read()
print(content)
f.close()
wb
f = open('log',mode='wb')
f.write('附近看到類似糾紛'.encode('utf-8'))
f.close()
ab
f = open('模特主婦護士班主任',mode='rb',)
content = f.read()
print(content)
f.close()
注:以b方式開啟時,讀取到的內容是位元組型別,寫入時也需要提供位元組型別,不能指定編碼 #3,‘+’模式(就是增加了一個功能) r+, 讀寫【可讀,可寫】
f = open('log',mode='r+',encoding='utf-8')
print(f.read())
f.write('aaa')
f.close()
w+,寫讀【可寫,可讀】
f = open('log',mode='w+',encoding='utf-8')
f.write('aaa')
f.seek(0)
print(f.read())
f.close()
a+, 寫讀【可寫,可讀】
f = open('log',mode='a+',encoding='utf-8')
f.write('佳琪')
f.seek(0) #設定游標位置
print(f.read())
f.close()
#4,以bytes型別操作的讀寫,寫讀,寫讀模式
r+b, 讀寫【可讀,可寫】
f = open('log',mode='r+b')
print(f.read())
f.write('大猛,小孟'.encode('utf-8'))
f.close()
w+b,寫讀【可寫,可讀】 a+b, 寫讀【可寫,可讀】
游標:
.seek() 游標是按位元組移動,一箇中文是3個位元組(utf-8),一個英文是1個位元組(utf-8)
.tell() 告訴游標位置,需要print(f.tell())才能輸出
移動游標:
f.seek(f.tell-x) # x是所移動的位元組數,-是左移,+是右移
f.readline() #一行一行的讀
f.readlines() #買一行當成列表中的一個元素,加入到list中
檔案操作書寫法二:
讀寫:
with open ('log',mode = 'r+',encoding = 'utf-8') as obj:
print(obj.read())
操作多個檔案:
with open ('log',mode = 'r+',encoding = 'utf-8') as obj,open ('log',mode = 'r+',encoding = 'utf-8') as obj
print........
with open ('log',mode = 'r+',encoding = 'utf-8') as obj1,\
open ('log',mode = 'r+',encoding = 'utf-8') as obj2 :
print..........