打開文件的幾種方式
r(只讀,文件的描述符在開頭)
rb(二進制格式打開,只讀,文件的描述符在開頭)
r+(讀寫,文件的描述符在開頭)
w(只寫,文件的描述符在開頭,若文件存在則會覆蓋,若不存在就會創建一個)
wb(二進制寫入文件,文件的描述符在開頭,同前)
w+(讀寫)
a(打開文件,用於追加內容,文件若存在描述符在末尾)
ab(二進制追加內容)
a+(讀寫,文件的描述符在末尾)
x(創建一個新文件並打開以寫入,若文件已存在則報錯)
xb(創建一個新文件並打開以二進制寫入)
t(文本模式,默認)
open函數
def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True):
file # 文件的路徑
mode # 以哪種方式打開,默認是r(讀寫)
buffering # 用來設置緩衝策略的可選整數,通過0來關閉緩衝(只允許在二進制模式下),
# 1來選擇行緩衝(只在文本模式下使用),並使用大於1的整數表示固定大小的塊緩衝區。
# 若沒有參數,則使用默認緩衝區策略.在許多系統上,緩衝區通常是4096或8192字節長
encoding # 用於設置使用哪種編碼方式來進行編碼或解碼
errors # 設置爲"ignore"可以忽略錯誤,"strict"不忽略錯誤,默認爲不忽略錯誤,最好不要用在二進制模式下
newline # 只適用於文本模式(t)
# 輸入模式下:不定義此參數,將會將'\n', '\r', '\r\n',轉換爲'\n',
closefd # 如果爲False,則在關閉文件時,底層文件描述符將保持打開狀態。當給定文件名時,這將不起作用,並且在這種情況下必須爲True。
讀文件
--------- 簡單讀文件(一次性讀取全部) --------
path = "test.txt"
f = open(path, 'r')
f.read()
--------- 讀文件部分內容 --------
f.read(10) # 是根據字節來讀取的
--------- 讀一行數據 --------
f.readline()
--------- 讀所有行數據 --------
f.readlines() # 返回一個列表
---------- 修改文件描述符的位置 ---------
f.seek(0) # 根據偏移量進行移動
f.close() # 關閉文件
寫文件
path = "test.txt"
f.open(path, 'w')
f.write("123456") # 並不會立即寫入文件,要等待文件關閉或者緩衝區滿了之後纔會存入文件
f.flush() # 立即將緩衝區的數據存入文件
f.close()
其他數據類型的讀寫set-tuple-dict-list
需要用到python的一個庫函數pickle,直接導入即可
# 寫入
path = "test.txt"
list1 = [1, 2, 3, 4, [1, 2, 35]]
with open(path, 'wb') as f:
pickle.dump(list1, f)
# 讀取
with open(path, 'rb') as f1:
list2 = pickle.load(f1)
print(list2)
這是以二進制方式進行讀取的,雖然我們看不懂文件裏的內容,但並不影響我們對數據進行讀取