fp =open("文件名",mode="採用的模式",encoding="使用什麼編碼集")
fp 這個變量接受到open的返回值 是一個文件io對象 (又稱文件句柄)
i => input 輸入
o => output輸出
有了對象以後,就可使用對象.屬性 或者 對象.方法進行操做
fp.write("字符串")
fp.close() #關閉文件
fp.read() #讀取內容
app
#(1)文件的寫入
#打開文件
fp = open("test.txt",mode='w',encoding='utf-8') #把冰箱門打開
#寫入文件
fp.write("把大象放進去")
#關閉文件
fp.close()函數
#建立了test.txt文本且文本內容以下:編碼
#(2)文件的讀取
#打開文件
fp = open("test.txt",mode='r',encoding='utf-8') #把冰箱門打開
#讀取文件
res = fp.read()
#關閉文件
fp.close()
print(res)
#會輸出:大象放進去spa
(參數寫成轉化的字符編碼格式)
#encode() 編碼 將字符串轉化爲字節流(Bytes流)
#decode() 解碼 將Bytes流轉化爲字符串
#(1)
strvar = "今天"
bt = strvar.encode("utf-8") #編碼稱成節流
print(bt)
res2 = bt.decode("utf-8") #解碼成字符串
print(res2)指針
#輸出的結果爲:code
#(2)wb 和 rb 模式 二進制字節流模式 (注意點:使用字節流模式的時候,不要指定encoding)
#文件的寫入視頻
#例1:
fp = open("test.txt",mode="wb")
strvar = "好晴朗"
res = strvar.encode("utf-8")
fp.write(res)
fp.close()
#若是沒有test.txt文本會建立一個並把」好晴朗」寫入文件中.
#文件的讀取
#例2:對象
fp = open("test.txt",mode="rb")
#讀取文件
res = fp.read()
fp.close()
print(res)
res2 = res.decode("utf-8")
print(res2)blog
#由於例1寫入:好晴朗 輸出的內容是分別是沒有解碼的」好晴朗」的二進制流和解碼後的內容
#(3)複製圖片 (圖片或視頻之類的二進制字節流的內容,均可以使用b模式,好比wb,rb...)
#打開文件
fp = open("ceshi.png",mode="rb")
#讀取文件
res = fp.read()
#關閉文件
fp.close()
#打開文件
fp = open("ceshi2.png",mode="wb")
#寫入文件
fp.write(res)
#關閉文件
fp.close()圖片
#(utf-8 編碼格式下 默認一箇中文三個字節 一個英文或字符 佔用一個字節)
#read() 功能:讀取字符的個數(裏面的參數表明字符個數)
#seek() 功能:調整指針的位置(裏面的參數表明字節個數)
#tell() 功能:當前光標左側全部字節數(返回字節數)
把光標移動到文件行首
fp.seek(0)
把光標移動到文件末尾
fp.seek(0,2)
#(1)r+ 可讀可寫 (先讀後寫)
fp = open("0506_3.txt",mode="r+",encoding="utf-8")
res = fp.read()
#print(res) #先讀出文件有什麼內容
fp.write("e") #從光標的位置寫入內容
#把光標移動到第0個字節上,那就是文件開頭
fp.seek(0) #將文件的光標移動到開頭
res = fp.read() #從光標的位置開始讀取文件內容
print(res)
fp.close()
#(2)r+ 可讀可寫 (先寫後讀)
fp = open("0506_3.txt",mode="r+",encoding="utf-8")
#把光標移動到文件末尾
fp.seek(0,2)
fp.writelines("123")
fp.seek(0)
res = fp.read()
print(res)
fp.close()
#(3)w+ 可讀可寫 (沒有文件的話,會自動建立)
fp = open("0506_4.txt",mode="w+",encoding="utf-8")
fp.write("123456")
fp.seek(0)
res = fp.read()
print(res)
fp.close()
#(4)a+ 可讀可寫 append (寫入的時候,強制把光標移動到最後)
fp = open("0506_4.txt",mode="a+",encoding="utf-8")
fp.seek(0)
fp.write("444444")
fp.seek(0)
res = fp.read()
print(res)
fp.close()
#(5)tell read seek 注意 seek 括號裏的字節數 read 括號裏的字節數
fp = open("0506_4.txt",mode="a+",encoding="utf-8") #當前光標在內容的最後一個
res = fp.tell() #從光標左側全部字節數,
print(res) #內容爲:123456789 光標在9的後面,因此輸出9
fp.seek(5) #將光標跳到第五個字節,
res = fp.tell() #因此光標在12345
print(res) #6 5和6的位置,因此輸出5
res = fp.read(2) #讀取2個字符(日後讀兩個字節)
res = fp.tell() #再次統計字節數(5+2)
print(res) #因此輸出7
fp.close()
注意有中文的狀況 若是移動錯誤 有可能讀取不出來
#例:
fp =open("0506_4.txt",mode="a+",encoding="utf-8")
res = fp.tell()
print(res)
fp.seek(2)
res = fp.tell()
print(res)
fp.read(2)
res = fp.tell()
print(res)
#當先後面的字符是天 若是用seek移動一個字節
fp.seek(5)
res = fp.tell()
print(res)
res = fp.read()
fp.close()
#(6) with操做 語法 自動關閉文件 至關於幫你執行了fp.close
# as 至關於起別名fp = open("0506_5.txt",mode="w",encoding="utf-8")
#with 是一個代碼塊 不要落下冒號:
with open("0506_5.txt",mode="w",encoding="utf-8") as fp:
#往文件裏面寫的內容只能是字符串 或者 字節流
fp.write("123")
最後的內容:123
#刷新緩衝區 flush
#當文件關閉的時候自動刷新緩衝區
#當整個程序運行結束的時候自動刷新緩衝區
#當緩衝區寫滿了 會自動刷新緩衝區
#手動刷新緩衝區
#例1:
fp = open("0506_6.txt",mode="w+",encoding="utf-8")
fp.write("123445")
#手動刷新緩衝區
fp.flush()
while True:
pass
fp.close()
#readable() 功能: 判斷文件對象是否可讀
#writable() 功能: 判斷文件對象是否可寫
#例1:
fp =open("0506_6.txt",mode="r",encoding="utf-8")
res1 = fp.readable()
res2 = fp.writable()
print(res1) #True
print(res2) #False
for i in fp:
print(i)
文件裏面的內容爲:
123445
231031
32131y
321y0
#(1)readline() 功能: 讀取一行文件內容
readline(字符數)
若是給的參數大於當前行字符數,只獲取當前行全部內容
若是給的參數小於當前行字符數,按照實際給的參數進行字符的獲取
#例:
with open("0506_6.txt",mode="r+",encoding="utf-8") as fp:
res = fp.readline(300)
print(res)
#0 0.0 0j False '' [] () set() {} None
#循環打印文件裏面每一行的內容
#while res:
#print(res)
#res = fp.readline()
#(2)readlines() 功能:將文件中的內容按照換行讀取列表當中
#例:
lst = []
with open("0506_6.txt",mode="r+",encoding="utf-8") as fp:
res = fp.readlines()
for i in res:
res2 = i.strip()
lst.append(res2)
print(lst)
#(3)writelines() 功能: 將內容是字符串的可迭代性數據寫入文件中
# 參數:內容爲字符串類型的可迭代數據
#例:
with open("0506_6.txt",mode="r+",encoding="utf-8") as fp:
#strvar = "今每天氣好晴朗"
lst = ["親愛的\n","美女\n","請看我\n","一眼\n"]
fp.writelines(lst)
效果以下:
親愛的
美女
請看我
一眼
# (4)truncate() 功能:把要截取的字符串提取出來,而後清空內容將提取的字符串從新下入文件中(字節)
#例:
with open("0506_6.txt",mode="r+",encoding="utf-8") as fp:
fp.seek(9)
fp.truncate() #截取6個字節的內容從新寫入
#效果是剩: 親愛
注意區分:
read(字符)
readline(字符)
seek(字節)
truncate(字節)
tell返回的是字節