檔案操作示例分析:
檔案操作一般要經歷三個步驟:
- 開啟檔案
- 操作檔案
- 關閉檔案
讀取操作示例:
>>>f = open('test.txt', 'r') # 開啟檔案test.txt, r表示只讀,檔案不存在則報錯
>>>f.read() # 檔案開啟後,read()方法將檔案內容讀到記憶體中
'123432' # 獲取的內容是一個字串
>>>f.close() # 檔案使用完必須關閉,開啟檔案佔用資源
開啟檔案:檔案控制代碼 = file('檔案路徑',‘模式’)
備註:Python中開啟檔案有兩種方式,即open()和file(),本質上前者會呼叫後者進行檔案操作,推薦使用open
上訴,方式中,每次開啟一個檔案操作完成後,都要手動關閉檔案,操作繁瑣,易忘。推薦一種更加簡便的操作方式:with語句, 這種語句幫助我們自動完成f.close() 這一步操作。
with open('test.txt', 'r') as f:
file = f.read()
print(type(file))
pirint(file)
# 輸出結果
<class'str'> # 取出的內容還是字串
123432 # 雖然沒有看到引號,但還是字串
----------------------------------------------------------------------
# with 語句的多檔案同時處理
# Python2.7版本之後,with 支援同事開啟多個檔案
with open('db1','r') as f1, open('db2', 'r') as f2:
pass
-----------------------------------------------------------------------
# 一個檔案讀取一行處理一行然後寫入另一個檔案一行
with open('db1', 'r', encoding="utf-8") as f1, open('db2', 'w', encoding="utf-8") as f2:
for line in f1:
new_str = line.replace('abc', "st")
f2.write(new_str)
寫入檔案示例:
with open('test.txt', 'a+') as f:
f.write('hello world')
備註:所有的檔案操作,如果檔案沒有寫絕對路徑,預設路徑為程式所在路徑,檔案操作要注意操作檔案的存在性。
檔案操作許可權:
r # 以只讀的方式開啟檔案,檔案的指標放在檔案的開頭,預設方式
r+ # 以讀寫模式開啟,和追加效果一樣,但是如果檔案不存在,不會像a一樣建立檔案,而是報錯
rb # 以二進位制格式開啟一個檔案用於只讀,檔案指標將會放在檔案的開頭,這是預設模式
rb+ # 以二進位制格式開啟一個檔案用於讀寫,檔案指標放在檔案的開頭
w # 替換重寫(覆蓋寫入)
w+ # 以讀寫模式開啟檔案,如果該檔案已經存在則將其內容覆蓋,檔案不存在則建立檔案
wb # 以二進位制格式開啟一個檔案只用於寫入,如果該檔案已經存在則將其內容覆蓋,檔案不存在則建立檔案
wb+ # 以二進位制格式開啟一個檔案用於讀寫, 如果該檔案已經存在則將其內容覆蓋,檔案不存在則建立檔案
a # 在原檔案的基礎上,追加寫入,檔案指標放在檔案結尾,如果檔案不存在,則建立新檔案進行寫入
a+ # 開啟一個檔案用於讀寫,如果檔案已經存在,檔案指標放在檔案結尾。檔案開啟時是追加模式,如果檔案不存在則建立檔案用於讀寫
ab # 以二進位制格式開啟一個檔案,如果檔案存在,檔案指標放在檔案結尾,檔案不存在則建立新檔案並進行寫入
ab+ # 以二進位制格式開啟一個檔案用於追加,如果檔案存在,檔案指標放在檔案結尾,檔案不存在則建立新檔案用於讀寫
b # 二進位制檔案,主要用於跨平臺,來解決windows和linux的回車換行區別,按照位元組
x # python3中新增,如果檔案存在則報錯,不存在則建立並寫入內容
檔案其他方法:
f.mode # 顯示檔案開啟格式
f.flush() # 把緩衝區中的資料刷到硬碟,當你往檔案裡寫資料時,python會先把你寫的內容寫到緩衝區,等緩衝區滿了再統一自動寫入硬碟,因此減少了對硬碟的操作次數,畢竟硬碟的速度比記憶體慢得多
f.read() # 把檔案一次性讀入記憶體
f.read(szie) # 一次讀取指定大小的檔案
f.readline() # 讀取一行檔案
f.readlines() # 把檔案都讀入記憶體,並且每行轉成列表中的一個元素
f.tell() # 顯示程式游標所在該檔案中的當前的位置,位置是以位元組來算的
f.seek() # 跳到指定位置,f.seek(0) 是返回檔案開始,位置是以位元組來算的
f.truncate() # f.truncate(10) 從檔案開頭擷取10個字元,超出的都刪除
f.writelines() # 引數需為一個列表,將一個列表中的每一個元素都寫入檔案
f.xreadlines() # 以迭代的形式迴圈檔案,在處理大檔案時效率極高,只記錄檔案開頭和結尾,每迴圈一次,只讀一行,因此不需要將整個檔案都一次性載入到記憶體,而如果用readlines(),則需要將整個檔案都載入到記憶體,處理大檔案不合適。
f.next() # 獲取下一行資料,不存在,則報錯
檔案物件的屬性
#學習中遇到問題沒人解答?小編建立了一個Python學習交流群:153708845
file.closed # 返回True如果檔案已經關閉,否則返回False
file.mode # 返回被開啟檔案的訪問模式
file.name # 返回檔案的名稱
file.softspace # 如果用print輸出後,必須跟一個空格符,則返回False ,否則返回True
檔案讀取選擇:
- 檔案很小,read() 最方便
- 不確定檔案大小,反覆呼叫read(size) 安全
- 如果是配置檔案,呼叫readlines() 最方便
作業系統中檔案操作
import os # python中的檔案操作需要匯入os模組
os.rename( current_file_name, new_file_name) # 檔案重新命名
os.remove( file_name ) # 刪除檔案
os.mkdir( "test") # 建立一個目錄test
os.chdir( "newdir" ) # 切換目錄到newdir
os.getcwd() # 獲取當前目錄的路徑
os.rmdir( "dirname" ) # 刪除目錄,在刪除目錄前,它的所有內容應該先被清除