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