目錄python
文件操做的基礎模式有三種(默認的操做模式爲r模式):windows
文件讀寫內容的格式有兩種(默認的讀寫內容的模式爲b模式):app
須要注意的是:t、b這兩種模式均不能單獨使用,都須要與r/w/a之一連用。編碼
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 nick最帥嗎 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 nick最帥嗎 data2:
因爲f.read()一次性讀取文件的全部內容,若是文件很是大的話,可能會形成內存爆掉,即電腦卡死。所以可使用f.readline()/f.readlines()讀取文件內容。code
# 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', 'nick最帥嗎']
w: 只能寫,不能讀,文件存在的時候回清空文件後再寫入內容;文件不存在的時候會建立文件後寫入內容。內存
# wt f = open('34w.txt', mode='wt', encoding='utf8') print(f"f.readable(): {f.readable()}") f.write('nick 真帥呀\n') # '\n'是換行符 f.write('nick,nick, you drop, I drop.') f.write('nick 帥的我五體投地') f.flush() # 馬上將文件內容從內存刷到硬盤 f.close()
f.readable(): False
# wb f = open('34a.txt', mode='wb') f.write('nick 帥的我五體投地'.encode('unicode_escape')) # 編碼成bytes類型 print( f"type('nick 帥的我五體投地'.encode('unicode_escape')): {type('nick 帥的我五體投地'.encode('unicode_escape'))}") f.close()
type('nick 帥的我五體投地'.encode('unicode_escape')): <class 'bytes'>
a: 能夠追加。文件存在,則在文件的末端寫入內容;文件不存在的時候會建立文件後寫入內容。unicode
# at f = open('34a.txt', mode='at', encoding='utf8') print(f"f.readable(): {f.readable()}") f.write('nick 真帥呀\n') # '\n'是換行符 f.write('nick,nick, you drop, I drop.') f.write('nick 帥的我五體投地') f.close()
f.readable(): False
b模式是通用的模式,由於全部的文件在硬盤中都是以二進制的形式存儲的,須要注意的是:b模式讀寫文件,必定不能加上encoding參數,由於二進制沒法再編碼。get
try: import requests response = requests.get( 'http://www.chenyoude.com/Python從入門到放棄/文件的三種打開模式-mv.jpg?x-oss-process=style/watermark') 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('nick 好帥啊'.encode('utf8')) f.close()