Python:檔案操作詳細教程

python学习者0發表於2024-04-09

檔案操作示例分析:

檔案操作一般要經歷三個步驟:

  1. 開啟檔案
  2. 操作檔案
  3. 關閉檔案

讀取操作示例:

>>>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" )     # 刪除目錄,在刪除目錄前,它的所有內容應該先被清除

相關文章