-
- open() 函數(shù)的作用
-
- open函數(shù)語法參考
-
- open()函數(shù)參數(shù)說明
-
- mode參數(shù)詳解
-
- 準(zhǔn)備工作
-
- w 寫入模式
-
- a 追加模式
-
- r 只讀模式
-
- 總結(jié)
-
- 代碼總結(jié)
-
- 路徑的轉(zhuǎn)義
-
- mode模式
-
- 圖片總結(jié)
1. open() 函數(shù)的作用
open[???p?n]:打開。
open的中文釋義是打開。
open( )
函數(shù)的作用是打開文件。
【返回值】
open函數(shù)返回的是一個(gè)文件對(duì)象。
2. open函數(shù)語法參考
open 函數(shù)語法如下:
open(file, mode='r', encoding='None', errors='None')
file[fa?l]:文件。
mode[m??d]:模式。
encoding[?n?k??d??]:編碼。
errors[?er?z]:錯(cuò)誤。
none [n?n]:沒有。
open( )函數(shù)中的參數(shù)還有很多,這里介紹4個(gè)常用參數(shù)。
3. open()函數(shù)參數(shù)說明
1. file參數(shù)
file[fa?l]:文件。
file 是必需參數(shù)。
參數(shù)file 表示要打開文件的路徑。
路徑可以是絕對(duì)路徑,也可以是相對(duì)路徑。
絕對(duì)路徑是指文件在硬盤上真正存在的路徑。
相對(duì)路徑是針對(duì)當(dāng)前文件夾這一參考對(duì)象,來描述文件路徑的形式。
參考《68.Python的相對(duì)路徑》。
2. encoding 參數(shù)
encoding[?n?k??d??]:編碼。
參數(shù) encoding 表示文件的編碼方式,文件編碼方式一般為 'utf-8'。
為了避免程序報(bào)錯(cuò)或者讀取到的內(nèi)容出現(xiàn)亂碼,需要把 encoding 設(shè)置為 'utf-8',即寫為 encoding='utf-8'。
編碼的詳細(xì)知識(shí),以后在做詳細(xì)介紹。
3. errors參數(shù)
errors 參數(shù)表示讀寫文件時(shí)碰到錯(cuò)誤的報(bào)錯(cuò)級(jí)別。
strict [str?kt]:嚴(yán)格的。
strict:嚴(yán)格級(jí)別。字符編碼有報(bào)錯(cuò)即拋出異常。也是默認(rèn)級(jí)別,errors 參數(shù)值傳入None 即按此級(jí)別拋出異常。
ignore [?ɡ?n??]:忽視、忽略。
ignore:忽略級(jí)別。字符編號(hào)有錯(cuò)誤,忽略掉。
推薦errors參數(shù)的取值為'ignore',表示在遇到編碼錯(cuò)誤時(shí)忽略該錯(cuò)誤,程序會(huì)繼續(xù)執(zhí)行,不會(huì)退出。
replace [r??ple?s]:替代。
replace:替換級(jí)別,字符編碼有錯(cuò)的,替換成?。
4. mode參數(shù)
mode[m??d]:模式。
mode 是可選參數(shù)。
參數(shù)mode決定了打開文件的模式。
r:以只讀模式打開文件。
t:以文本文件模式打開文件。
b:以二進(jìn)制文件文件模式打開文件。
w:以只寫模式打開文件,不能讀內(nèi)容。如果文件不存在,則創(chuàng)建文件;如果文件存在,則覆蓋文件的內(nèi)容。
x:以獨(dú)占創(chuàng)建模式打開文件,如果文件不存在,則創(chuàng)建并以寫入模式打開;如果文件已存在,則引發(fā)FileExistsError異常。
a:以追加模式打開文件,不能讀內(nèi)容。如果文件不存在,則創(chuàng)建文件;如果文件存在,則在文件末尾追加。
+:以更新(讀寫)模式打開文件,必須與r、w或a組合使用,才能設(shè)置文件為讀寫模式。
這些字符可以進(jìn)行組合,以表示不同類型的文件的打開模式,如下表所示。
69-1mode模式
【備注】上圖來源于《看漫畫學(xué)Python》。
【溫馨提示】
參數(shù) mode 可以不寫,不寫時(shí)mode默認(rèn)值為r,即只讀模式。
4. mode參數(shù)詳解
1. 準(zhǔn)備工作
- 我在D盤里新建一個(gè)文件夾命名為
69
。 - 我的
69
文件夾中有1個(gè)名為img
的文件夾,有1個(gè)名為69
的ipynb文件。(img文件夾是我存儲(chǔ)圖片用的,大家可以不用理會(huì))
vscode編輯器資源管理器中的目錄如下所示:
69-2
硬盤中的目錄如下所示:
69-3
- 我的代碼在名為
69
的ipynb文件中編寫。 - 我用的vscode編輯器,編輯器打開的文件夾為
69
。
【備注】
編輯器打開的文件夾不同,則相對(duì)路徑不同。
2. w 寫入模式
w:以只寫模式打開文件,不能讀內(nèi)容。如果文件不存在,則創(chuàng)建文件;如果文件存在,則覆蓋文件的內(nèi)容。
【語法解析】
- 文件不存在,則創(chuàng)建文件。
- 文件存在,則覆蓋文件的內(nèi)容。
以絕對(duì)路徑,w只寫模式打開文件:
f = open ("D:\\\\69\\成績1.txt", "w", encoding="utf-8")
以相對(duì)路徑,w只寫模式打開文件:
f = open ("成績2.txt", "w", encoding="utf-8")
【代碼解析】
f 是變量名,接收open 函數(shù)返回的文件對(duì)象;
"D:\\\\69\\成績1.txt"
是文件的絕對(duì)路徑。
"成績2.txt"
是文件的相對(duì)路徑。
w
表示只寫模式。
w 模式下,文件存在則打開文件,文件不存在則新建文件。
我們在準(zhǔn)備工作時(shí)是沒有新建過txt文件,因此成績1.txt
和成績2.txt
文件此時(shí)不存在。
不存在則新建一個(gè)文件。
因此,運(yùn)行代碼后我們觀察資源管理器目錄或者69文件夾,我們發(fā)現(xiàn)多了成績1.txt
和成績2.txt
2個(gè)文件。
69-4
這就是文件不存在則新建文件的意思。
【課堂練習(xí)】
修改路徑參數(shù),用絕對(duì)路徑的方法在桌面新建一個(gè)名為測試.txt
的文件。
不知道桌面的絕對(duì)路徑的可以用【shift】方法隨便查看一個(gè)桌面文件的絕對(duì)路徑。
下面就是我查看的桌面某個(gè)文件的路徑:
"C:\\Users\\xiaoyuzhou\\Desktop\\空.docx"
參照上面的代碼修改路徑參數(shù),代碼如下:
f = open ("C:\\Users\\xiaoyuzhou\\Desktop\\測試.txt", "w", encoding="utf-8" )
【終端輸出】
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \\UXXXXXXXX escape
運(yùn)行上面的代碼,程序報(bào)錯(cuò)。
程序報(bào)錯(cuò),我們首先考慮路徑參數(shù)轉(zhuǎn)義字符問題。
將路徑參數(shù)中的所有\\
都多加上一個(gè)反斜杠\\
,修改如下:
f = open ("C:\\\\Users\\\\xiaoyuzhou\\\\Desktop\\\\測試.txt",
"w",
encoding="utf-8" )
運(yùn)行代碼后,我們發(fā)現(xiàn)程序能夠正常運(yùn)行。
我們查看電腦桌面,發(fā)現(xiàn)電腦桌面多了一個(gè)名為測試.txt
的文件。
但我們發(fā)現(xiàn)增加斜桿的方法實(shí)在太麻煩,那有沒有其它簡便的方法呢?
其實(shí)我們可以通過在路徑參數(shù)前面加上一個(gè)字母r/R,這時(shí)候就不需要使用反斜桿進(jìn)行轉(zhuǎn)義了。
【路徑參數(shù)前增加一個(gè)r】
f = open (r"C:\\Users\\xiaoyuzhou\\Desktop\\測試1.txt",
"w",
encoding="utf-8" )
【路徑參數(shù)前增加一個(gè)R】
f = open (R"C:\\Users\\xiaoyuzhou\\Desktop\\測試2.txt",
"w",
encoding="utf-8" )
大家觀察電腦桌面,我們就成功的新建了測試1.txt
和測試2.txt
2個(gè)文件。
我們繼續(xù)講解w模式的如果文件存在,則覆蓋文件的內(nèi)容。
我們剛才新建了成績1.txt
和成績2.txt
2個(gè)文件。
那如果文件存在,則w模式可以直接寫入。
在成績1.txt
中寫入張三,90分
f = open ("成績1.txt", "w", encoding="utf-8")
f.write("張三,90分")
f.close( )
上述代碼的作用是將張三,90分
寫入到文件成績1.txt
中。
【代碼解析】
f = open ("成績1.txt", "w", encoding="utf-8")
f 是變量名,接收open函數(shù)返回的文件對(duì)象。
"成績1.txt"
是open函數(shù)的file參數(shù),表示文件的相對(duì)路徑;
"w"
是open函數(shù)的mode參數(shù),表示只寫模式;
encoding表示字符編碼格式為utf-8
。
f.write("張三,90分")
上述代碼的作用是將張三,90分
寫入到文件對(duì)象中,即寫入到成績1.txt
。
【將內(nèi)容寫入文件的語法】
f.write(obj)
f 是文件對(duì)象,就是一個(gè)變量名,你可以自己命名。
文件對(duì)象后緊跟一個(gè)英文小圓點(diǎn).
write是方法名。
obj為要寫入的內(nèi)容,這里要寫入的內(nèi)容是張三,90分
運(yùn)行代碼后,大家查看成績1.txt
文件,如下所示:
69-5
【關(guān)閉文件語法】
f.close( )
f 是變量名,接收open函數(shù)返回的文件對(duì)象。
文件對(duì)象后緊跟一個(gè)英文小圓點(diǎn).
close是方法名。
【溫馨提示】
大家在Python中操作文件時(shí),注意讀寫完畢后都要進(jìn)行關(guān)閉。這根我們?nèi)粘I钪械牟僮魇且粯拥模魂P(guān)閉文件,我們是沒辦法對(duì)文件進(jìn)行刪除的。
上面代碼我們完成了寫入功能,下面我們講解覆蓋文件的內(nèi)容的含義:
【覆蓋文件的內(nèi)容】
再執(zhí)行下面的代碼之前,大家先打開成績1.txt
,確定文件里的內(nèi)容為張三,90分
下面的代碼要實(shí)現(xiàn)的功能是將李四,60分
寫入文件成績1.txt
:
f = open ("成績1.txt", "w", encoding="utf-8")
f.write("李四,60分")
f.close()
運(yùn)行上面的代碼后,我們再觀察成績1.txt
文件,如下所示:
69-6
之前的張三,90分
內(nèi)容被覆蓋了,只保留了最后1次寫入的內(nèi)容,這就是覆蓋文件內(nèi)容的意思。
【知識(shí)回顧】
w:以只寫模式打開文件,不能讀內(nèi)容。如果文件不存在,則創(chuàng)建文件;如果文件存在,則覆蓋文件的內(nèi)容。
那如果我不想刪除文件本來就存在的內(nèi)容,怎么辦呢。
我們可以采用追加模式。
3. a 追加模式
a:以追加模式打開文件,不能讀內(nèi)容。如果文件不存在,則創(chuàng)建文件;如果文件存在,則在文件末尾追加。
a追加模式
和w只寫模式
的區(qū)別在于追加模式保留原有內(nèi)容,只寫模式覆蓋原有內(nèi)容。
- 將mode參數(shù)修改為
a
- 寫入內(nèi)容為
王五,77分
f = open ("成績1.txt", "a", encoding="utf-8")
f.write("王五,77分")
f.close()
打開成績1.txt
,如下圖所示:
69-7
打開成績1.txt
可以看到王五,77分
已經(jīng)寫入到文件中,且原有的內(nèi)容李四,60分
依然存在,這就是追加模式。
但大家發(fā)現(xiàn)我們寫入的內(nèi)容和原本的內(nèi)容之間沒有符號(hào)作為間隔,不方便我們觀看。那該如何修改呢?
我們采用轉(zhuǎn)義字符的方法可以解決上述問題。
\\n
可以實(shí)現(xiàn)換行功能:
f = open ("成績1.txt", "a", encoding="utf-8")
f.write("\\n趙六,66分")
f.close()
輸入后如下圖所示:
69-8
【轉(zhuǎn)義字符】
69-9轉(zhuǎn)義字符
【備注】上圖來源于《風(fēng)變編程》。
4. r 只讀模式
r:以只讀模式打開文件。
只能打開已經(jīng)存在的文件。
如果文件不存在,程序不會(huì)創(chuàng)建新的文件,會(huì)報(bào)錯(cuò)。
f = open ("成績9.txt", "r", encoding="utf-8")
【終端輸出】
FileNotFoundError: [Errno 2] No such file or directory: '成績9.txt'
[Errno 2] No such file or directory: '成績9.txt'
:沒有這樣的文件或目錄: '成績9.txt '
f = open ("成績1.txt", "r", encoding="utf-8")
f.close()
運(yùn)行上述的代碼,成績1.txt文件其實(shí)已被我們成功打開。
但Python中的打開和我們?nèi)粘I钪械拇蜷_不是一個(gè)含義。
我們工作中的打開,肉眼是可以看到一個(gè)具體的文檔的。
Python中的打開,其實(shí)就是得到一個(gè)文件對(duì)象,方便我們后續(xù)操作文件,這個(gè)文件對(duì)象我們?nèi)庋凼强床灰姷摹?/p>
有時(shí)候我們并不需要對(duì)文件進(jìn)行寫的操作,我們只需要打開文件即只讀模式,此時(shí)我們的第二個(gè)參數(shù)mode 就為r
,注意,r
也可以不寫。
mode 參數(shù)就講解到這里,剩下的模式將不再進(jìn)行贅述。
5. 總結(jié)
1. 代碼總結(jié)
# w只寫模式
f = open ("花名冊.doc", "w", encoding="utf-8")
f.write("王小溪")
# a追加模式
f = open ("花名冊.doc", "a", encoding="utf-8")
f.write("\\n李華華")
# r只讀模式
f = open ("花名冊.doc", "r", encoding="utf-8")
# 關(guān)閉文件
f.close()
2. 路徑的轉(zhuǎn)義
絕對(duì)路徑參數(shù)前面加上一個(gè)字母r/R,這時(shí)候就不需要使用反斜桿進(jìn)行轉(zhuǎn)義了。
3. mode模式
w:以只寫模式打開文件,不能讀內(nèi)容。如果文件不存在,則創(chuàng)建文件;如果文件存在,則覆蓋文件的內(nèi)容。
a:以追加模式打開文件,不能讀內(nèi)容。如果文件不存在,則創(chuàng)建文件;如果文件存在,則在文件末尾追加。
r:以只讀模式打開文件。
4. 圖片總結(jié)
69-10. open函數(shù)
【溫馨提示】
如果初學(xué)者在本節(jié)的代碼遇到報(bào)錯(cuò),基本是file路徑參數(shù)的錯(cuò)誤,建議大家回看相對(duì)路徑
的相關(guān)知識(shí),相對(duì)路徑是非常重要的一個(gè)知識(shí)點(diǎn),這個(gè)知識(shí)點(diǎn)不掌握,后面將寸步難行。
-
參數(shù)
+關(guān)注
關(guān)注
11文章
1661瀏覽量
31879 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4237瀏覽量
61969 -
Open
+關(guān)注
關(guān)注
0文章
14瀏覽量
11055
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論