文件的三種打開模式


文件操作的基礎模式有三種(默認的操作模式為r模式):

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

文件讀寫內容的格式有兩種(默認的讀寫內容的模式為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
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()
f.readable(): True
data1: aaa

data2: ['bbb\n', 'ccc\n', 'nick最帥嗎']

二、文件打開模式之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: 可以追加。文件存在,則在文件的末端寫入內容;文件不存在的時候會創建文件后寫入內容。

# 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()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM