按文件中數據的組織形式把文件分為文本文件和二進制文件兩類。
文本文件:文本文件存儲的是常規字符串,由若干文本行組成,通常每行以換行符'\n'結尾。常規字符串是指記事本或其他文本編輯器能正常顯示、編輯並且人類能夠直接閱讀和理解的字符串,如英文字母、漢字、數字字符串。文本文件可以使用字處理軟件如gedit、記事本進行編輯。
二進制文件:二進制文件把對象內容以字節串(bytes)進行存儲,無法用記事本或其他普通字處理軟件直接進行編輯,通常也無法被人類直接閱讀和理解,需要使用專門的軟件進行解碼後讀取、顯示、修改或執行。常見的如圖形圖像文件、音視頻文件、可執行文件、資源文件、各種數據庫文件、各類office文檔等都屬於二進制文件
文件內容操作三步走:打開、讀寫、關閉。
open(file, mode='r', buffering=-1, encoding=None, errors=None,
newline=None, closefd=True, opener=None)
file參數指定了被打開的文件名稱。
mode參數指定了打開文件後的處理方式。
buffering參數指定了讀寫文件的緩存模式。0表示不緩存,1表示緩存,如大於1則表示緩沖區的大小。默認值-1表示由系統管理緩存。
encoding參數指定對文本進行編碼和解碼的方式,只適用於文本模式,可以使用Python支持的任何格式,如GBK、utf8、CP936等等。
如果執行正常,open()函數返回1個文件對象,通過該文件對象可以對文件進行讀寫操作。
如果指定文件不存在、訪問權限不夠、磁盤空間不足或其他原因導致創建文件對象失敗則拋出異常。
f1 = open('file1.txt', 'r') # 以讀模式打開文件
f2 = open('file2.txt', 'w') # 以寫模式打開文件
當對文件內容操作完以後,一定要關閉文件對象,這樣才能保證所做的任何修改都確實被保存到文件中。
f1.close()
但是,即使寫了關閉文件的代碼,也無法保證文件一定能夠正常關閉。例如,如果在打開文件之後和關閉文件之前發生了錯誤導致程序崩潰,這時文件就無法正常關閉。在管理文件對象時推薦使用with關鍵字,可以有效地避免這個問題。
with open(filename, mode, encoding) as fp:
#這裡寫通過文件對象fp讀寫文件內容的語句
上下文管理語句with還支持下面的用法:
with open('test.txt', 'r') as src, open('test_new.txt', 'w') as dst:
dst.write(src.read())
文件打開方式:
模式
說明
r
讀模式(默認模式,可省略),如果文件不存在則拋出異常
w
寫模式,如果文件已存在,先清空原有內容
x
寫模式,創建新文件,如果文件已存在則拋出異常
a
追加模式,不覆蓋文件中原有內容
b
二進制模式(可與其他模式組合使用)
t
文本模式(默認模式,可省略)
+
讀、寫模式(可與其他模式組合使用)
文件對象常用屬性
屬性
說明
buffer
返回當前文件的緩沖區對象
closed
判斷文件是否關閉,若文件已關閉則返回True
fileno
文件號,一般不需要太關心這個數字
mode
返回文件的打開模式
name
返回文件的名稱
例7-1 向文本文件中寫入內容,然後再讀出。
s = 'Hello world\n文本文件的讀取方法\n文本文件的寫入方法\n'
with open('sample.txt', 'w') as fp: #默認使用cp936編碼
fp.write(s)
with open('sample.txt') as fp: #默認使用cp936編碼
print(fp.read())
例7-3 讀取並顯示文本文件所有行。
with open('sample.txt') as fp: #假設文件采用CP936編碼
for line in fp: #文件對象可以直接迭代
print(line)