一、操作文件的函數/方法
在Python/ target=_blank class=infotextkey>Python中要操作文件需要記住1個函數和3個方法:
序號
函數/方法
說明
01
open
打開文件,并且返回文件操作對象
02
read
將文件內容讀取到內存
03
write
將制定內容寫入文件
04
close
關閉文件
二、read方法——讀取文件2.1》讀取文件步驟
- open函數第一個參數是文件名稱(注意:文件名是區分大小寫的),包括路徑;
- 如果文件存在,返回文件操作對象(利用這個對象操作read方法)
- 如果文件不存在,會拋出異常
2、read方法可以一次性讀入并返回文件的所有內容
3、close方法負責關閉文件(利用這個對象操作close方法)
- 如果忘記關閉文件會造成系統資源消耗,而且會影響到后續對文件的訪問
準備工作:準備一個文件名叫Hello的text文件,在里面面隨便拿寫點內容,后續好編寫代碼運行。
建立文件步驟:鼠標右擊左側的pythonProject——》New——》點擊File——》寫上文件名——》確定即可——》雙擊文件打開文件編寫內容(我的內容是:Hello World!我是python自學網,歡迎你~)。如下圖:
1)讀取python文件內容時出現以下錯誤:
UnicodeDecodeError: 'gbk' codec can't decode byte 0x81 in position 16: illegal multibyte sequence
代碼編寫:
# 1. 打開文件 file = open("HELLO") # 2. 讀取 text = file.read() print(text) # 3. 關閉 file.close()
執行結果:
原因:
python中默認的編碼方式為gbk,而windows的默認編碼方式為UTF-8,所以設置python編碼方式為UTF-8就OK了~
修改代碼:加上encoding="UTF_8"
# 1. 打開文件 file = open("HELLO", encoding="UTF-8") # 2. 讀取 text = file.read() print(text) # 3. 關閉 file.close()
修改后執行結果:
提示:
- 在開發中,通常會先編寫打開和關閉的代碼,再編寫中間針對的讀和寫操作~
- 如果不發生編碼錯誤,第一個編寫的代碼是可以正常運行的,就不需要加上encoding=”UTF-8”
- 文件指針標記 從哪個位置開始讀取數據
- 第一次打開文件時,通常文件指針會指向文件的開始位置
- 當執行了read方法后,文件指針會移動到讀取內容的末尾默認情況下會移動到文件末尾
提問:
如果執行了一次read方法讀取了所有內容,那么在此調用read方法還能獲得到內容嗎?
答案:
不能。因為第一次讀取后文件指針移動到了文件的末尾,再次調用不會讀取到任何的內容
讀取文件后文件指針會改變:代碼驗證:
# 1. 打開文件 file = open("HELLO", encoding="UTF-8") # 2. 讀取 text = file.read() print(text) print("+" * 30) text = file.read() print(text) # 3. 關閉 file.close()
執行結果:在分隔線下方并沒有打印出文件內容
利用內容長度再來驗證一下:len(text)
總結: read方法執行后,會把文件指針移動到文件的末尾,移動到末尾后再調用read方法就獲取不到內容了。
三、open函數——打開文件方式
open函數默認以只讀方式打開文件,并且返回文件對象
3.1》語法格式如下file = open("文件名", "訪問方式")
3.2》第二個參數是打開的模式mode
訪問方式
說明
r
以只讀方式打開文件。文件的指針將會放在文件的開頭,這是默認模式。
如果文件不存在,會拋出異常
w
以只寫方式打開文件。
如果文件存在,會被覆蓋。如果文件不存在,則創建新文件。
a
以追加方式打開文件件。
如果該文件已存在,文件指針將會放在文件的結尾。如果文件不存在,創建新文件進行寫入。
r+
以讀寫方式打開文件。
文件的指針將會放在文件的開頭。如果文件不存在,拋出異常。
w+
以讀寫方式打開文件。
如果文件存在會被覆蓋。如果文件不存在,創建新文件
a+
以讀寫方式打開文件。
如果該文件已存在,文件指針將會放在文件的結尾。如果文件不存在,創建新文件進行寫入。
代碼示范:
1、w = write 寫
# 1. 打開文件 file = open("HELLO", "w", encoding="UTF-8") # 2. 寫入 text = file.write("Python自學網") print(text) # 3. 關閉 file.close()
執行結果:打印寫入的內容返回的是長度,另外文件內容被替換了
2、a = Append,追加
代碼:
# 1. 打開文件 file = open("HELLO", "a", encoding="UTF-8") # 2. 寫入 text = file.write("Python自學網123") # 3. 關閉 file.close()
執行結果:控制臺沒有數據,在HELLO文件新增加了Python自學網123
提示:
后面三個只需有印象就好了,幾乎不會用到,因為后三種會頻繁的移動文件指針,會影響文件的讀寫效率,開發中很多的時候會以只讀、只寫的方式來操作文件。
四、readline方法——按行讀取文件內容4.1》應用場景
read方法默認會把文件的所有內容一次性讀取到內存,如果文件太大,對內存的占用會非常嚴重,此時需要解決可以利用readline方法再利用循環一行一行的把大文件讀取完,一次讀取一行內容不會給內存造成太大壓力。
4.2》readline方法
- readline方法可以一次讀取一行內容
- 方法執行后,會把文件指針移動到下一行,準備再次讀取
# 1. 打開文件 file = open(“文件名”) while True: # 讀取一行代碼 text = file.readline() # 判斷是否督導內容 if not text: break # 每讀取一行的末尾已經有了一個 'n' print(text, end="") # 3. 關閉文件 file.close()
代碼示例:
準備工作:把HELLO文件內容修改成如下,方便觀察
代碼:
# 1. 打開文件 file = open("HELLO", encoding="UTF_8") while True: # 讀取一行代碼 text = file.readline() # 判斷是否讀到內容 if not text: break # 每讀取一行的末尾已經有了一個 'n' print(text, end="") # 3. 關閉文件 file.close()
執行結果:
本篇就到這里吧,Python文件的操作方法使用算是告一段落了,下一篇是文件讀寫案例—復制文件,敬請期待!
如果覺得對你有所幫助就多多支持一下博主吧,讓我保持更多的創作動力!
分享網站:《Python自學網》http://www.wakey.com.cn/
適合新手入門到精通 | python全棧體系課程