文件操作示例分析:
文件操作一般要經歷三個步驟:
- 打開文件
- 操作文件
- 關閉文件
讀取操作示例:
>>>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" ) # 刪除目錄,在刪除目錄前,它的所有內容應該先被清除