1. 程式人生 > 實用技巧 >day9 python之檔案操作

day9 python之檔案操作

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() # 擷取位元組,清空檔案,再寫入擷取內容