day9 python之檔案操作
阿新 • • 發佈:2020-07-16
1、檔案操作
1.1 基本模式
# 格式 f = open("相對路徑/絕對路徑",mode = "模式",encoding = "編碼級")
# 模式
# w ------> write (不存在則建立,存在則清空,遊標在最後)
# r ------> read (不存在則報錯,遊標在開頭,引數為字元)
# a ------> append (不存在則建立,存在則追加,強制遊標在最後)
# 1 開啟檔案
f = open("practice.txt",mode="w",encoding="utf-8")
# 2 寫入內容
f.write("我愛中國")# 3 關閉檔案
f.close()
1.2 位元組流模式
# bytes(b'123') 只能識別 ascll 編碼,需要編碼、解碼
# wb
# rb
# ab
f1 = open("practice.txt",mode="wb")
f1.write("我愛中國".encode())
f1.close()
f2 = open("practice.txt",mode="rb")
res = f2.read()
f2.close()
print(len(res)) # 計算二進位制位元組流的長度(12)res1 = res.decode() # 把二進位制位元組流解碼為utf-8
print(res,res1) # b'\xe6\x88\x91\xe7\x88\xb1\xe4\xb8\xad\xe5\x9b\xbd' 我愛中國
1.2.1 指令碼複製圖片
# 不指定 encoding
f = open("picture.png",mode = "rb")
res = f.read()
f.close()
f = open("picture副本.png",mode = "wb")f.write(res)
f.close()
1.3 擴充套件模式
# r+
# r+ 先讀後寫
f = open("practice.txt",mode="r+",encoding="utf-8")
# 先讀
res = f.read()
print(res)
# 後寫
f.write("人生苦短")
# 在讀
f.seek(0) # 調整遊標位置在開頭
res = f.read()
print(res)
f.close()
# r+ 先寫後讀
f = open("practice.txt",mode="r+",encoding="utf-8")
f.seek(0,2) # 調整遊標位置在末尾
f.write("我用python")
f.seek(0)
res = f.read()
print(res)
f.close()
# w+
# a+
# r+b
# w+b
# a+b
1.4 with 語法(不需要close)
# 格式一
with open("相對路徑/絕對路徑",mode = "模式",encoding = "編碼級") as f :
pass
# 格式二
with open("相對路徑/絕對路徑",mode = "模式",encoding = "編碼級") as f1 ,open("相對路徑/絕對路徑",mode = "模式",encoding = "編碼級") as f2 :
pass
1.5 flush 重新整理緩衝區
# write 只寫到記憶體
"""
1、檔案關閉時,自動重新整理緩衝區
2、程式執行結束時,自動重新整理緩衝區
3,緩衝區記憶體寫滿時,自動重新整理緩衝區
"""
# 4、手動重新整理刷衝區,f.flush
f = open("practice.txt",mode="w",encoding="utf-8")
while True:
data = input("請輸入內容:")
f1.write(data)
f1.flush()
f1.close()
1.6 檔案方法
f.seek(0) # 調整遊標位置到開頭(位元組)
f.seek(0,2) # 調整遊標位置到最後
f.tell() # 遊標位置向左到開頭的位元組數
f.readable() # 判斷檔案是否可讀
f.writable() # 判斷檔案是否可寫
f.readline() # 讀一行
f.readlines() # 讀所有行,原型存入列表
f.writelines() # 寫入內容是字串的可迭代的資料
f.truncate() # 擷取位元組,清空檔案,再寫入擷取內容