Python:文件操作詳細教程

文件操作示例分析:

文件操作一般要經歷三個步驟:

  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" )     # 刪除目錄,在刪除目錄前,它的所有內容應該先被清除
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章