《Python零基礎快樂學習之旅》學習筆記14——文件的讀取與寫入
第14章 文件的讀取與寫入
14.1 讀取文件
Python處理讀取或寫入文件時,首先需要將文件開啟,然後可以接受一次讀取所有文件內容或是逐行讀取。
14.1.1 open()
open() 函式可以開啟一個文件供讀取或寫入。如果函式執行成功,將返回檔案物件。open()函式的基本使用格式如下:
file_Obj = open(file, mode="r") # 這裡只列出最常用的兩個引數
-
file:用字串列出要開啟的文件。
-
mode:開啟文件的模式,如果省略則代表mode=“r”。使用時如果mode="w"或其它,也可以省略”mode=“,直接寫”w“。也可以同時具有多項模式,例如”wb“代表以二進位制文件開啟供寫入,可以是下列基本模式。
下列是第一個字母的操作意義。
- ”r“:以只讀方式開啟文件供讀取。
- ”w“:開啟文件供寫入。如果檔案已存在則開啟檔案,並覆蓋原先的內容。如果檔案不存在,則建立新檔案。
- “a”:開啟文件供寫入,如果原先文件有內容,則將新寫入資料附加在原先的內容之後。
- ”x“:開啟一個新的文件供寫入,如果該檔案已存在則會報錯。
以下是第二個字母的意義,代表文件型別。
- ”b“:二進位制模式。
- ”t“:文字模式(預設)。
-
file_Obj:文件物件。print()函式可以將輸出導向此物件,不使用時可使用”file_Obj.close()“關閉。使用print()時,預設是將資料輸出至螢幕,如果要將資料輸出至文件,需要在print()方法中新增引數”file=xxx“,”xxx“是指使用open()方法所返回的文件物件。
程式例項:
# 建立文件物件
fobj = open("out14_1.txt", "w")
print("Hello world", file=fobj) # 將字串資料輸出至文件
# 關閉文件物件
fobj.close()
執行結果:
14.1.2 read()
文件開啟後,可以使用read() 讀取所開啟的文件。使用read()讀取時,所有的文件內容將以一個字串方式被讀取,然後存入字串變數中。列印這個字串變數就相當於列印整個文件內容。
程式例項:
fileName = "out14_1.txt" # 設定要開啟的文件路徑
file_Obj = open(fileName) # 使用預設mode=r開啟文件,返回呼叫物件file_obj
data = file_Obj.read() # 讀取文件內容到變數data
file_Obj.close() # 關閉文件物件,如果沒有關閉可能會損壞文件內容
print(data)
執行結果:
Hello world
14.1.3 with
Python提供一個關鍵詞with,可以在開啟文件與建立文件物件時使用,語法如下:
with open(要開啟的文件) as 文件物件:
相關係列指令
使用這種方式開啟文件,最大的特點是可以不必在程式中關閉文件,with指令會在結束不需要此文件時自動將它關閉。文件經"with open() as 文件物件"開啟後會產生一個文件物件,此時使用read()即可讀取此文件物件的內容。
程式例項:
fileName = "out14_1.txt" # 設定要開啟的文件路徑
with open(fileName) as file_Obj:
data = file_Obj.read() # 讀取文件內容到變數data
print(data)
執行結果:
Hello world
14.1.4 逐行讀取文件內容
若想逐行讀取文件內容,可使用下列迴圈:
for line in file_Obj: # file_Obj為文件物件
程式程式碼段
程式例項:
fn = 'E:\Python-Files\ch14\out14_2.txt' # 設定要開啟的文件
with open(fn) as file_Obj:
for line in file_Obj: # 逐行讀取文件內容到變數line
print(line.rstrip()) # 刪除末尾的換行符
執行結果:
I'm fine.
Thank you!
And you?
14.1.5 readlines()
使用with關鍵詞配合open()時,所開啟的文件物件只能在with段內使用。使用readlines() 可以逐行讀取,同時以列表方式儲存,讀取時每行的換行字元都會儲存在列表內。此外還可以在with段外遍歷原先文件物件的內容。
程式例項:
fn = 'E:\Python-Files\ch14\out14_2.txt' # 設定要開啟的文件
with open(fn) as file_Obj:
obj_list = file_Obj.readlines() # 每次讀一行
print(obj_list) # 列印列表
# 逐行輸出列表內容
for line in obj_list:
print(line.rstrip())
執行結果:
["I'm fine.\n", 'Thank you!\n', 'And you?']
I'm fine.
Thank you!
And you?
14.2 寫入文件
14.2.1 將執行結果寫入空文件內
若要寫入文件,則要設定寫入模式mode=‘w’,“mode”可省略,直接在open()函式內輸入‘w’。如果開啟文件可以讀取或寫入,則使用‘r+’。如果文件不存在,open()會建立該文件物件,如果文件已存在,則覆蓋原先的內容。
輸入到文件可以使用write()方法,語法格式如下:
len = file_Obj.write(data) # file_Obj為文件物件,data為要輸出的資料
程式例項:
fileName = 'E:\Python-Files\ch14\out14_3.txt'
str = 'agqtqr132535olksdfkd'
with open(fileName, 'w') as file_Obj:
file_Obj.write(str)
執行結果:
14.2.2 輸出多行資料
如果要將多行資料輸出到文件,設計程式時需要注意各行之間的換行符號問題,write()不會主動在行的末端加上換行符號。
程式例項:
fileName = 'E:\Python-Files\ch14\out14_3.txt'
str1 = 'Never say never'
str2 = 'Your will, my hands'
with open(fileName, 'w') as file_Obj:
file_Obj.write(str1)
file_Obj.write(str2)
執行結果:
輸出至文件時,可新增空格或換行符號,以便獲得預期的輸出結果。
fileName = 'E:\Python-Files\ch14\out14_3.txt'
str1 = 'Never say never'
str2 = 'Your will, my hands'
with open(fileName, 'w') as file_Obj:
file_Obj.write(str1 + '\n') # 新增換行符號
file_Obj.write(str2 + '\n')
執行結果:
14.2.3 建立附加文件
建立附加文件主要是可以將文件內容輸出到所開啟的文件末端,當以open()開啟時,需增加引數mode=‘a’或直接用’a’。若該文件不存在,則新建文件供寫入,若該文件存在,則將新內容追加到原先文件內容之後。
程式例項:
fileName = 'E:\Python-Files\ch14\out14_3.txt'
str1 = 'Being on sea, sail; being on land, settle.'
str2 = 'Birds of a feather flock together.'
with open(fileName, 'a') as file_Obj:
file_Obj.write(str1 + '\n') # 新增換行符號
file_Obj.write(str2 + '\n')
執行結果:
往期文章:
- 《Python零基礎快樂學習之旅》學習筆記2——認識變數與基本數學運算
- 《Python零基礎快樂學習之旅》學習筆記3——Python的基本資料型別
- 《Python零基礎快樂學習之旅》學習筆記4——基本輸入與輸出
- 《Python零基礎快樂學習之旅》學習筆記5——程式的流程控制使用if語句
- 《Python零基礎快樂學習之旅》學習筆記6——列表(list)
- 《Python零基礎快樂學習之旅》學習筆記7——迴圈設計
- 《Python零基礎快樂學習之旅》學習筆記8——元組(tuple)
- 《Python零基礎快樂學習之旅》學習筆記9——字典(dict)
- 《Python零基礎快樂學習之旅》學習筆記10——集合(set)
- 《Python零基礎快樂學習之旅》學習筆記11——函式設計
- 《Python零基礎快樂學習之旅》學習筆記12——類-面向物件
- 《Python零基礎快樂學習之旅》學習筆記13——模組的設計與應用