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


 

一.文件操作

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

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)
#會輸出:大象放進去

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

 (參數寫成轉化的字符編碼格式)
    #encode() 編碼  將字符串轉化為字節流(Bytes)
    #decode() 解碼  Bytes流轉化為字符串
#(1)
strvar = "今天"
bt = strvar.encode("utf-8")   #編碼稱成節流
print(bt)
res2 = bt.decode("utf-8")     #解碼成字符串
print(res2)

#輸出的結果為:

 



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

#因為例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返回的是字節

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM