python open写入_Python3 open() 函数详解 读取文件写入文件追加文件二进制文件
Python3 open() 函數(shù)詳解 讀取文件寫入文件追加文件二進制文件
open()函數(shù)的主要作用是打開文件并返回相應文件對象,使用文件對象可以對當前文件進行讀取、寫入、追加等操作,默認情況下"r"模式,文件不存在的話會發(fā)生OSError錯誤的。
它是Python的內(nèi)置函數(shù),在python文件中直接可以使用。
語法
#常用方式
open(file, mode='r')
#完整參數(shù)
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
參數(shù)
file - 文件的路徑(相對或絕對)
mode[可選] - 指定文件的打開模式,分為只讀,只寫,讀寫,追加等。還有一些常用的組合模式,詳見下表:
模式及含義
字符含義
'r'只讀方式打開文件,文件不可寫,文件如果不存在則報錯,打開文件后指針會放在文件的開頭,這是默認模式
'w'打開文件只用于寫入內(nèi)容,不可讀取,如果文件不存在則自動創(chuàng)建,如果原文件已存在則會將其清空覆蓋。
'x'獨占只寫模式,所謂獨占,就是要求當前指定文件必須是不存在的,然后再由它進行創(chuàng)建。如果已存在則會報錯。
'a'打開文件用于追加(只寫),如果文件不存在則自動創(chuàng)建,如果已存在,則在文件內(nèi)容的最后追加內(nèi)容。
'b'二進制模式,一般用于非文本文件,如圖片等。
't'文本模式(默認)
'+'讀寫模式,一般配合只讀、只寫模式使用,以擴充它們的功能。
'U'通用換行模式(已廢棄)
常用組合模式
字符含義
'r+'打開文件用于讀寫,指針放在文件開頭,寫入的內(nèi)容從當前所在位置進行替換(需要注意:如果是新打開的文件,就是從開頭開始替換,如果使用了readline或readlines方法讀取內(nèi)容后,當前位置會發(fā)生改變的)。
'rb'以二進制格式打開文件用于只讀,文件不存在會報錯。
'rb+'以二進制格式打開文件用于讀寫,寫入的內(nèi)容類型必須是bytes(b)類型。寫入的內(nèi)容從當前所在位置進行替換。
'w+'打開文件用于讀寫,文件不存在則創(chuàng)建,存在則覆蓋。
'wb'以二進制格式打開文件用于只寫,寫入的內(nèi)容類型必須是bytes(b)類型。
'wb+'以二進制格式打開文件用于讀寫,寫入的內(nèi)容類型必須是bytes(b)類型。寫入的內(nèi)容直接覆蓋原文件。
'a+'打開文件用于讀寫,文件不存在則創(chuàng)建,存在則在文件內(nèi)容末尾追加內(nèi)容。
'ab'以二進制格式打開文件用于只寫(追加),寫入的內(nèi)容類型必須是bytes(b)類型。
'ab+'以二進制格式打開文件用于讀寫,寫入的內(nèi)容類型必須是bytes(b)類型。寫入的內(nèi)容會在文件內(nèi)容末尾追加。
buffering[可選] - 用于設置緩沖策略,必須是一個整數(shù),傳遞0關(guān)閉緩沖(僅允許在二進制下可以使用),傳遞1則是行緩沖(僅在文本模式下可用),傳遞大于1的整數(shù),則是指定緩沖區(qū)的大小(以字節(jié)為單位),如果沒有給出指定的緩沖策略,將按照二進制文件以固定大小進行緩沖,在許多的系統(tǒng)上,緩沖區(qū)的長度通常為4096或8192字節(jié),而“交互式”文件文件(isatty()返回True)使用行緩沖,其他文件文件與二進制文件的一致。
encoding[可選] - 指定打開文件的編碼和解碼的字符編碼,應該只用于文本模式下。
errors[可選] - 指定文件在編碼和解碼時發(fā)生錯誤的處理方式,默認是嚴格的模式,發(fā)生錯誤會報ValueError錯誤,其他參數(shù)詳見下表:
字符含義
'strict'嚴格模式,發(fā)生錯誤會直接報錯,與不傳遞值效果一致。
'ignore'忽略模式,一般不建議使用,可能會導致數(shù)據(jù)丟失。
'replace'在有錯誤的地方插入指定的標記??梢允侨我庾址?#xff0c;例如('?')
'surrogateescape'一般用于處理未知編碼的文件
'xmlcharrefreplace'僅在寫入時使用,將編碼不支持的字符轉(zhuǎn)換為相應的XML字符
'backslashreplace'用Python的反向轉(zhuǎn)義序列替換格式錯誤的數(shù)據(jù)
'namereplace'僅在寫入時使用,用\N{...}轉(zhuǎn)義序列替換不支持的字符
newline[可選] - 指定換行模式,僅適用于文本模式,可以是None,'\n','\r'和'\r\n'。
closefd[可選] - 如果參數(shù)為false時且file給的是文件描述符,則在關(guān)閉文件時,底層文件描述符將保持打開狀態(tài),如果file給出的是文件名,則必須為True(默認值),否則報錯。
opener[可選] - 自定義文件的開啟者,這個不常用。
返回值
相應文件對象
實例
§ 實例1 - 'r','r+','rb','rb+'模式
#r
>>>f = open('text.txt', 'r')
>>>f.readline()
'abcdefg1234567'
f.close()
#r+
#r是只讀模式,由于加上了+號,就變成了讀寫模式了,但是它與其他寫模式不同,它是從當前光標位置開始寫入的,默認是從文件內(nèi)容的頭部開始??梢酝ㄟ^seek來控制光標位置,也會受到read、readline、readlines影響。
#本例中頭部的abc被替換成了aaa。
>>>f = open('text.txt', 'r+')
>>>f.write('aaa')
>>>f.seek(0)
>>>f.read()
'aaadefg1234567'
>>>f.close()
#rb
>>>f = open('text.txt', 'rb')
>>>f.read()
b'abcdefg1234567'
#rb+
>>>f = open('text.txt', 'rb+')
>>>f.write(b'aaa')
>>>f.seek(0)
>>>f.read()
b'aaadefg1234567'
>>>f.close()
§ 實例2 - 'w','w+','wb','wb+'模式
#text.txt原本內(nèi)容為“abcdefg1234567”。
#w
#由于w是只寫模式,所以寫入完畢后還得再打開一次才能讀取到內(nèi)容。
>>>f = open('text.txt', 'w')
>>>f.write('aaa')
>>>f.close()
>>>f = open('text.txt', 'r')
>>>f.readline()
'aaa'
>>>f.close()
#從結(jié)果可以看出,文件的內(nèi)容被完全覆蓋了。
#w+
#這樣就可以覆蓋然后又讀取了。
>>>f = open('text.txt', 'w+')
>>>f.write('aaa')
>>>f.seek(0)
>>>f.read()
'aaa'
>>>f.close()
#wb
>>>f = open('text.txt', 'wb')
>>>f.write(b'aaa')
>>>f.close()
>>>f = open('text.txt', 'r')
>>>f.read()
'aaa'
>>>f.close()
#wb+
>>>f = open('text.txt', 'wb+')
>>>f.write(b'aaa')
>>>f.seek(0)
>>>f.read()
b'aaa'
>>>f.close()
§ 實例3 - 'a','a+','ab','ab+'模式
#text.txt原本內(nèi)容為“abcdefg1234567”。
#a
#由于a是只寫模式,所以寫入完畢后還得再打開一次才能讀取到內(nèi)容。
>>>f = open('text.txt', 'a')
>>>f.write('aaa')
>>>f.close()
>>>f = open('text.txt', 'r')
>>>f.read()
'abcdefg1234567aaa'
>>>f.close()
#a+
#這樣就可以追加然后又讀取了。
>>>f = open('text.txt', 'a+')
>>>f.write('aaa')
>>>f.seek(0)
>>>f.read()
'abcdefg1234567aaa'
>>>f.close()
#ab
>>>f = open('text.txt', 'ab')
>>>f.write(b'aaa')
>>>f.close()
>>>f = open('text.txt', 'r')
>>>f.read()
'abcdefg1234567aaa'
>>>f.close()
#ab+
>>>f = open('text.txt', 'ab+')
>>>f.write(b'aaa')
>>>f.seek(0)
>>>f.read()
b'abcdefg1234567aaaaaa'
>>>f.close()
§ 實例4 - 'x'模式
#假設text.txt是存在的。
#由于text.txt是不存在的,所以順利執(zhí)行了。我們再執(zhí)行一次試試。
>>>f = open('text.txt', 'x')
>>>f.write('abc')
>>>f.close()
>>>f = open('text.txt', 'r')
>>>f.read()
'abc'
>>>f.close()
#就會執(zhí)行報錯了。提示text.txt文件已經(jīng)存在了。用x可以防止文件被覆蓋或修改,只能一次性創(chuàng)建并寫入內(nèi)容。
>>>f = open('text.txt', 'x')
FileExistsError: [Errno 17] File exists: 'text.txt'
總結(jié)
以上是生活随笔為你收集整理的python open写入_Python3 open() 函数详解 读取文件写入文件追加文件二进制文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++ 二维数组 排序_漫画:“排序算法
- 下一篇: websocket python爬虫_p