053❤檔案的三種開啟模式
阿新 • • 發佈:2020-08-17
一、概念介紹
1.1 讀寫模式
檔案操作的基礎模式有三種,預設的操作模式(也就是不指定模式時)為r模式:
- r模式為read:只讀
- w模式為write:只寫
- a模式為append:追加
1.2 內容格式
檔案讀寫內容的格式有兩種(預設的讀寫內容的模式為b模式):
- t模式為text:文字格式
- b模式為bytes:位元組格式
需要注意的是:t、b這兩種模式均不能單獨使用,都需要與r/w/a之一連用
二、檔案的開啟模式之r模式
r: read,只讀模式,只能讀不能寫,檔案不存在時報錯。
f = open('32.txt', mode='r') # 報錯 f.write() f.close() # rt: read by text # windows的作業系統預設編碼為gbk,因此需要使用utf8編碼 f = open('32.txt', mode='rt', encoding='utf8') data = f.read() print(data) print(f"type(data): {type(data)}") f.close() # aaa # bbb # ccc # type(data): <class 'str'> # rb: read by bytes f = open('32.txt', mode='rb') data = f.read() print(data) print(f"type(data): {type(data)}") f.close() #b'aaa\nbbb\nccc\nnick\xe6\x9c\x80\xe5\xb8\x85\xe5\x90\x97' type(data): <class 'bytes'>
f.read()讀取完檔案後,檔案指標會跑到檔案的末端,如果再一次讀取,讀取的將是空。
f = open('32.txt', mode='rt', encoding='utf8')
data1 = f.read()
data2 = f.read()
print(f"data1: {data1}")
print(f"data2: {data2}")
f.close()
#data1: aaa
# bbb
# ccc
# data2:
缺點:由於f.read()一次性讀取檔案的所有內容,如果檔案非常大的話,可能會造成記憶體爆掉,即電腦卡死。因此可以使用f.readline()/f.readlines()讀取檔案內容。
# f.readline()/f.readlines() f = open('32.txt', mode='rt', encoding='utf8') print(f"f.readable(): {f.readable()}") # 判斷檔案是否可讀 data1 = f.readline() data2 = f.readlines() print(f"data1: {data1}") print(f"data2: {data2}") f.close() # f.readable(): True # data1: aaa # data2: ['bbb\n', 'ccc\n']
三、檔案開啟模式之w模式
w: 只能寫,不能讀,檔案存在的時候回清空檔案後再寫入內容;檔案不存在的時候會建立檔案後寫入內容。
# wt
f = open('34w.txt', mode='wt', encoding='utf8')
print(f"f.readable(): {f.readable()}")
f.write('lwx 真帥呀\n') # '\n'是換行符
f.write('lwx,lwx, you drop, I drop.')
f.write('lwx 帥的我五體投地')
f.flush() # 立刻將檔案內容從記憶體刷到硬碟
f.close()
#f.readable(): False
# wb
f = open('34a.txt', mode='wb')
f.write('lwx 帥的我五體投地'.encode('unicode_escape')) # 編碼成bytes型別
print(
f"type('lwx 帥的我五體投地'.encode('unicode_escape')): {type('lwx 帥的我五體投地'.encode('unicode_escape'))}")
f.close()
#type('lwx 帥的我五體投地'.encode('unicode_escape')): <class 'bytes'>
四、檔案開啟模式之a模式
a: 可以追加。檔案存在,則在檔案的末端寫入內容;檔案不存在的時候會建立檔案後寫入內容
# at
f = open('34a.txt', mode='at', encoding='utf8')
print(f"f.readable(): {f.readable()}")
f.write('lwx 真帥呀\n') # '\n'是換行符
f.write('lwx,lwx, you drop, I drop.')
f.write('lwx 帥的我五體投地')
f.close()
#f.readable(): False
五、檔案開啟讀取二進位制
try:
import requests
response = requests.get(
'https://www.cnblogs.com/AShine/p/13517932.html')
data = response.content
f = open('mv.jpg?x-oss-process=style/watermark', 'wb')
f.write(data)
print('done...')
f.close()
except Exception as e:
print(e, '報錯了,那就算了吧,以後爬蟲處會詳細介紹')
#done...
f = open('34w.txt', 'wb')
f.write('lwx 好帥啊'.encode('utf8'))
f.close()