文件的三種打開模式

文件操做的基礎模式有三種(默認的操做模式爲r模式):windows

  • r模式爲read
  • w模式爲write
  • a模式爲append

文件讀寫內容的格式有兩種(默認的讀寫內容的模式爲b模式):app

  • t模式爲text
  • b模式爲bytes

須要注意的是:t、b這兩種模式均不能單獨使用,都須要與r/w/a之一連用。編碼

1、文件打開模式之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
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最帥嗎']

2、文件打開模式之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'>

3、文件打開模式之a模式

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

4、文件打開讀取二進制

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()
相關文章
相關標籤/搜索