一、文件打開-模式
不同模式打開文件操作說明:
個人覺得需要熟知的:
- + :可讀、可寫。
- r :讀,指針在開頭。不會創建文件。
- r+ :讀、寫,指針在開頭。不會創建文件。寫內容在結尾累加。
- w :寫、創建、覆蓋,指針在開頭。從開頭開始編輯,即原有內容會被刪除。
- w+ :讀、寫、創建、覆蓋,指針在開頭。從開頭開始編輯,即原有內容會被刪除。
- a :寫、創建,指針在結尾。用於追加。新的內容將會被寫入到已有內容之後。
- a+ :讀、寫、創建,指針在結尾。用於追加。新的內容將會被寫入到已有內容之後。
需要了解的:
- t :文本模式 (默認)
x :寫模式,新建一個文件,如果該文件已存在則會報錯。
b :二進制模式。
U :通用換行模式(不推薦)。
rb :類似r模式,只是以二進制格式打開。一般用於非文本文件如圖片等。
rb+:類似r+模式,只是以二進制格式打開。一般用於非文本文件如圖片等。
wb :類似w模式,只是以二進制格式打開。一般用於非文本文件如圖片等。
wb+:類似w+模式,只是以二進制格式打開。一般用於非文本文件如圖片等。
ab :類似a模式,只是以二進制格式打開。一般用於非文本文件如圖片等。
ab+:類似a+模式,只是以二進制格式打開。一般用於非文本文件如圖片等。
二、File對象的系列文件操作
文件操作open函數理解:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
#file: 必需,文件路徑(相對或者絕對路徑)。
#mode: 可選,文件打開模式
#buffering: 設置緩衝
#encoding: 一般使用utf8
#errors: 報錯級別
#newline: 區分換行符
#closefd: 傳入的file參數類型
#opener:可以通過調用*opener*方式,使用自定義的開啓器。底層文件描述符是通過調用*opener*或者*file*, *flags*獲得的————目前沒搞懂這個參數的作用
直接上操作例子:
fil=open("2.txt","r+") # 讀寫模式a,a+在文件結尾追加;w、w+在文件開頭,原有信息會被刪除;有文件則讀寫,無文件則創建
str1=fil.read(2) # read(2)當前位置向後讀取兩字節內容
print("寫操作前讀去內容:",str1," 指針當前位置:",fil.tell()) # tell()或者當前位置
fil.write("0123456789q") # write()寫操作
fil.write("mmn")
print("寫操作完成後,指針當前位置:",fil.tell())
print()
print("\n文件名稱:",fil.name)
print("文件操作模式:",fil.mode)
print("文件操作是否關閉狀態:",fil.closed)
print()
fil.close()
print("關閉文件操作後,文件操作關閉狀態:",fil.closed)
寫操作前讀去內容: 指針當前位置: 0
寫操作完成後,指針當前位置: 14
文件名稱: 2.txt
文件操作模式: r+
文件操作是否關閉狀態: False
寫操作前讀去內容,讀取長度2: 34 from設爲0,移動3,指針當前位置: 5
seek()函數可以將指針指向指定位置,seek(offset [,from])
說明:from爲1或2時,文件需是按二進制文件模式打開:
fil=open("2.txt","rb+")
print("文件讀取內容:",fil.read())
# seek(offset [,from])方法改變當前文件的位置。Offset變量表示要移動的字節數。From變量指定開始移動字節的參考位置。
# from爲0將指針重新定位文件開頭
fil.seek(3,0)
print("寫操作前讀去內容,讀取長度2:",fil.read(2)," from設爲0,移動3,指針當前位置:",fil.tell())
# from設爲1,則使用當前的位置作爲參考位置。
fil.seek(3,1)
print("from設爲1,移動3,指針當前位置:",fil.tell())
# from被設爲2,那麼該文件的末尾將作爲參考位置
fil.seek(-3,2)
print("from設爲2,移動3,指針當前位置:",fil.tell())
fil.close()
print("關閉文件操作後,文件操作關閉狀態:",fil.closed)
文件讀取內容: b'0123456789qmmn'
寫操作前讀去內容,讀取長度2: b'34' from設爲0,移動3,指針當前位置: 5
from設爲1,移動3,指針當前位置: 8
from設爲2,移動3,指針當前位置: 11
關閉文件操作後,文件操作關閉狀態: True
文件內容讀取補充
import sys
fil=open("2.txt","r+")
print ("讀取整行的數據爲: ",fil.readline())
print ("讀取下一行的數據爲: ",fil.__next__())
print ("read讀取的數據爲: ",fil.read())
# 重新設置文件讀取指針到開頭
fil.seek(0, 0)
lines = fil.readlines()
print ("lines讀取的數據爲: %s" % (lines))
print ("lines[2]讀取的數據爲: ",lines[2]) # 從0開始算位,即2則是第三個數
print ("lines讀取的數據行數爲: ",lines.__len__())
for idx in lines:
sys.stdout.write(idx)
# print(idx.replace('\n',''))
print()
print ("位置:",fil.tell())
fil.close()
文件內容:
a6
b5
c4
d3
e2
f1
g7
運行結果:
讀取整行的數據爲: a6
讀取下一行的數據爲: b5
read讀取的數據爲: c4
d3
e2
f1
g7
lines讀取的數據爲: ['a6\n', 'b5\n', 'c4\n', 'd3\n', 'e2\n', 'f1\n', 'g7']
lines[2]讀取的數據爲: c4
lines讀取的數據行數爲: 7
a6
b5
c4
d3
e2
f1
g7
位置: 26
三、OS對象提供對文件目錄操作
import os
# 重命名文件
os.rename("readT.txt","2.txt")
# 刪除文件
os.remove("1.txt")
# 創建文件夾3
os.mkdir("3")
# 獲取當前目錄
print(os.getcwd())
# 修改當前目錄
os.chdir("D:\3")
# rmdir()方法刪除目錄,目錄名稱以參數傳遞。
os.rmdir("3")