文件打開的三種方式
文件操作的基礎模式有三種(默認的操作為r模式):
- r模式為read
- w模式為write
- a模式為append
文件讀寫內容的格式有兩種(默認的讀寫內容的模式為b模式):
- t模式為text
- b模式為bytes
需要注意的是: t、b這兩種模式均不能單獨使用,都需要與r/w/a之一連用。
一、文件打開模式值R模式
r:read,只讀模式,只能讀不能寫,文件不存在時報錯。
f = open('32.text',mode='r')
f.write()
f.close()
#rt :read by text
#windows的操作系統默認編碼為gbk,因此需要用的就是utf-8編碼
f = open('32.text',mode='r',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()讀取文件內容
# 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()
二、 文件打開模式之w模式
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模式
a:append 即追加,文件存在時會在文件的末端開始寫入內容;文件不存在時
會先創建文件再寫入內容
# 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參數,因為二進制不能再進行編碼了
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()