Python 基礎之文件操做與文件的相關函數

 

一.文件操做

fp =open("文件名",mode="採用的模式",encoding="使用什麼編碼集")
fp 這個變量接受到open的返回值  是一個文件io對象 (又稱文件句柄)
i => input 輸入
o => output輸出
有了對象以後,就可使用對象.屬性 或者 對象.方法進行操做
fp.write("字符串")
fp.close() #關閉文件
fp.read() #讀取內容
app

1.文件的寫入和讀取

#(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

2.將字符串和字節流(Bytes)類型進行轉換

 (參數寫成轉化的字符編碼格式)
    #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()圖片

 

3.擴展模式 + w+ r+ a+

#(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

二.文件的相關函數

 

1.flush

#刷新緩衝區 flush
    #當文件關閉的時候自動刷新緩衝區
    #當整個程序運行結束的時候自動刷新緩衝區
    #當緩衝區寫滿了 會自動刷新緩衝區
    #手動刷新緩衝區
#1:
fp = open("0506_6.txt",mode="w+",encoding="utf-8")
fp.write("123445")
#手動刷新緩衝區
fp.flush()
while True:
    pass
fp.close()

2.文件對象具備迭代性

#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

3.文件的相關函數

#(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返回的是字節

相關文章
相關標籤/搜索