日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python基礎(八)

系統 1977 0

今日主要內容

  • 文件操作
    • 文件路徑
    • 打開方式
    • 編碼方式
    • 文件句柄
  • 文件修改

一、文件操作

(一)文件操作的用途

  • 我們運行代碼時產生的數據和記錄,存儲在內存中,當程序運行完,產生的數據和記錄就會被釋放掉,如果我們需要這個數據或記錄以便下次使用,那就需要用文件存儲起來(如商城的購買記錄等)
  • 文件操作用于: 持久化存儲數據
  • 文件操作的三步驟:
    • 打開文件
    • 操作文件
    • 關閉文件

(二)文件操作的格式

  • f = open(文件路徑, 打開方式, 編碼方式)

                  
                    f = open("text.txt", mode="r", encoding="utf-8")
    """文件操作"""
    f.close()
                  
                
  • with open(文件路徑, 打開方式, 編碼方式) as f:

    • 以此方式打開文件不需要手動關閉文件,自動關閉
    • 可以打開多個文件
      • with open(...) as f1, open(...) as f2:
                  
                    with open("text.txt", mode="r", encoding="utf-8") as f:
      """文件操作"""
                  
                

(三)文件路徑

  • 文件路徑:文件所在的位置
  • 分為 絕對路徑 相對路徑
  1. 絕對路徑:

    • 從磁盤根目錄一直到文件名的路徑
                  
                    path = "C:\Users\11582\Desktop\筆記\day08"
                  
                
  2. 相對路徑

    • 同一個文件夾下的文件,如果在同一個文件夾,那么相對路徑就是這個文件名,如果在上一層文件夾則需要: ../
                  
                    path = "../裝飾器/測試.txt"
                  
                

    Python基礎(八)_第1張圖片

  3. 轉義:

    • 用兩個 \\ 代表
    • 路徑前加一個r

                        
                          path = r"C:\Users\11582\Desktop\筆記\day08"
                        
                      

(四)打開方式

  • mode可以省略,直接填入打開方式,若不填默認為只讀"r"

  • r 只讀
    w 只寫(清空寫)
    a 追加(追加寫)
    rb 以字節方式打開文件用于只讀
    wb 以字節方式打開文件用于只寫(清空寫)
    ab 以字節方式打開文件用于追加(追加寫)
    r+ 讀寫
    w+ 寫讀(清空寫)
    a+ 追加寫讀(追加寫)
    r+b 以字節方式打開文件用于讀寫
    w+b 以字節方式打開文件用于寫讀(清空寫)
    a+b 以字節方式打開文件用于追加(追加寫)
  1. mode="r"

    • 以只讀方式打開文件
    • 默認參數為只讀"r"
    • 文件讀取得到的是字符串
                  
                    f = open("text.txt", "r", encoding="utf-8")
    s = f.read()
    f.close()
    print(s)  # 打印文件內容
                  
                
  2. mode="w"

    • 以只寫方式打開文件
    • 文件打開時清空文件,之后寫入內容
    • 若文件不存在創建文件
    • 只能寫入字符串
                  
                    f = open("text.txt", "w", encoding="utf-8")
    f.write("文件操作")
    f.flush()
    f.close()  # 寫入"文件操作"
                  
                
  3. mode="a"

    • 以追加方式打開文件,可以在文件末尾追加寫入內容
                  
                    f = open("text.txt", "a", encoding="utf-8")
    f.write("文件操作")
    f.flush()
    f.close()  # 在文件末尾寫入"文件操作"
                  
                
  4. mode="rb"

    • 以字節方式打開文件用于只讀
    • 一般用于打開非文本文件,如圖片、音頻、視頻等
    • 以"rb"方式打開文件不能輸入編碼方式,輸入會報錯
                  
                    f = open("LOL.jpg", "rb")
    s = f.read()
    f.close()
    print(s)  # 打印文件內容(二進制碼)
    
                  
                
  5. mode="wb"

    • 以字節方式打開文件用于只寫
    • 文件打開時清空文件,之后寫入內容
    • 若文件不存在創建文件
    • 只能寫入字符串
                  
                    f = open("LOL.jpg", "rb")
    s = f.read()
    f.close()
    
    f = open("皮膚.png", "wb")
    f.write(s)
    f.flush()
    f.close()
    
                  
                
  6. mode="ab"

    • 以字節方式打開文件用于追加,可以在文件末尾追加寫入內容
                  
                    f = open("LOL.jpg", "rb")
    s = f.read()
    f.close()
    
    f = open("LOL.jpg", "ab")
    f.write(s)
    f.flush()
    f.close()
    
                  
                
  7. mode="r+"

    • 以讀寫方式打開文件,先讀后寫
    • 無論讀到哪個字符,寫都從文件最后開始寫入
    • 若先寫入,則會覆蓋文件不會清空,按照對應字節數覆蓋
                  
                    f = open("text.txt", "r+", encoding="utf-8")
    s = f.read()
    f.write("文件操作")  # 在文件末尾追加"文件操作"
    f.flush()
    f.close()
    print(s)  
    
                  
                
                  
                    f = open("text.txt", "r+", encoding="utf-8")
    f.write("123")  # 將文件中的"文"替換成"123"  一個中文對應三個字節
    f.flush()
    f.close()
    
                  
                
  8. mode="w+"

    • 以寫讀方式打開文件
    • 因為打開的時候清空文件,無論先寫后讀,還是先讀后寫,都無法讀到內容,所以一般很少用
                  
                    f = open("text.txt", "w+", encoding="utf-8")
    f.write("文件操作")
    f.flush()
    f.close()
    
                  
                
  9. mode="a+"

    • 以追加寫讀方式打開文件
    • 在文件末尾追加
                  
                    f = open("text.txt", "a+", encoding="utf-8")
    s.seek(0)
    s = f.read()
    f.write("文件操作")
    f.flush()
    f.close()
    
                  
                
  10. mode="r+b"

    • 以字節方式打開文件用于讀寫
  11. mode="w+b"

    • 以字節方式打開文件用于寫讀
  12. mode="a+b"

    • 以字節方式打開文件用于追加寫讀

(五)編碼方式

  • 編碼方式決定文件的讀寫以何種方式進行編碼
  • windows使用的編碼方式是GBK(終端)
  • Pycharm使用的是編碼方式是UTF-8
  • 打開方式所有以 字節打開 打開的都不能填入編碼方式

(六)文件句柄

  • 用來操作文件的媒介,文件操作的所有方法都針對于文件句柄

  • 文件句柄是一個迭代器,可以進行for循環

  • f.read() 讀取全部內容
    f.readline() 讀取一行內容
    f.readlines() 讀取全部內容
    f.close() 關閉文件
    f.write() 寫入內容
    f.flush() 刷新內容
    f.seek() 移動光標
    f.tell() 獲取光標位置
    f.truncate() 截斷文件
  1. f.read()

    • 讀取文件全部內容
    • 弊端:如果文件過大,導致內存崩潰
    • read(n) 方法可填入參數n,讀取n個字符
                  
                    f = open("text.txt", "r", encoding="utf-8")
    s = f.read(3)  # 讀取前3個字符
    s1 = f.read()  # 讀取剩余全部內容
    f.close()
    
                  
                
  2. f.readline()

    • 讀取文件一行內容
    • 末尾帶一個換行符,可以利用 strip() 刪除
                  
                    f = open("text.txt", "r", encoding="utf-8")
    s = f.readline()  # 讀取文件一行內容
    f.close()
    
                  
                
  3. f.readlines()

    • 讀取文件全部內容,將每一行的內容放在一個列表中
    • 每一行內容為一個字符串,末尾帶一個換行符
                  
                    f = open("text.txt", "r", encoding="utf-8")
    s = f.readlines()  # 讀取文件全部內容,得到一個列表
    f.close()
    
                  
                
  • 注意:文件讀取的結果為字符串類型
  1. f.close()

    • 關閉文件
    • 文件句柄在操作完一定要關閉
                  
                    f = open("text.txt", "r", encoding="utf-8")
    s = f.read()  
    f.close()  # 關閉文件句柄
    
                  
                
  2. f.write()

    • 向文件中寫入內容
    • 若文件存在,先清空文件后寫入(執行open的時候就已經清空文件了)
    • 若文件不存在,新建文件后寫入
                  
                    f = open("text.txt", "w", encoding="utf-8")
    f.write("文件操作")  # 寫入"文件操作"
    f.flush()
    f.close()  
    
                  
                
  • 注意:文件只能寫入字符串,寫入其他類型數據會報錯
  1. f.flush()

    • 刷新緩沖區,立刻寫入磁盤
    • 延申:緩沖區與緩存
      • 緩沖區:
        • 首先緩沖區是內存空間的一部分,在內存空間中預留了一定的存儲空間,這些空間用來暫時存儲輸入或輸出的數據
        • 緩沖區的存在是因為硬件間存在速度差(比如內存和CPU之間、CPU和硬盤之間)高速硬件會等待低速硬件,這時需要一個緩沖區來平衡
      • 緩存:
        • 緩存存在于CPU中,由于CPU運行速度遠大于內存的速度,為了避免頻繁的向內存讀取數據,將一部分數據存在緩存中,CPU需要使用的時候不需要再訪問內存
      • 總結:緩沖區偏重于寫,緩存偏重于讀
                  
                    f = open("text.txt", "w", encoding="utf-8")
    f.write("文件操作")
    f.flush()  # 刷新緩沖區
    f.close()  
    
                  
                
  2. f.seek()

    • 移動光標,文件的讀寫依靠光標進行
    • seek() 方法有兩個參數:
      • 第一個參數為移動到的位置
      • 第二個參數為光標從那個位置開始移動
        • 0:同開頭開始移動
        • 1:從當前位置移動
        • 2:從結尾開始移動
      • 當第二個參數不為0時,第一個參數必須為0
    • 光標移動的單位為字節,如果文本為中文,移動一個字符需要移動三個字節
                  
                    f = open("text.txt", "r", encoding="utf-8")
    f.read()
    f.seek(0)  # 光標移動到開頭
    f.read()
    f.close()
    
                  
                
  3. f.tell()

    • 獲取光標當前位置
                  
                    f = open("text.txt", "r", encoding="utf-8")
    f.read()
    f.seek(0)  # 光標移動到開頭
    s1 = f.tell()  # 開頭位置
    f.read()
    s2 = f.tell()  # 結尾位置
    f.close()
    
                  
                
  4. f.truncate()

    • 截斷文件,刪除光標后面所有內容
    • 截斷文件之前必須要移動光標,否以無法截斷
                  
                    f = open("text.txt", "r", encoding="utf-8")
    f.read()
    f.seek(3)  
    f.truncate()  # 第三個字符后面的內容全部被刪除
    f.close()
    
                  
                

二、文件修改

  • 文件修改只能將原文件內容讀取到內存中,將信息修改完畢之后,寫到新的文件中,將原文件刪除,并將新文件重命名成原文件的名字

  • 需要導入os模塊用來刪除文件和重命名文件

                  
                    import os
    
    with open("text.txt", "r", encoding="utf-8") as f1,\
      open("text副本.txt", "w", encoding="utf-8") as f2:
      for line in f1:
          new_line = line.replace("舊內容", "新內容")
          f2.write(new_line)
    os.remove("text.txt")  # 刪除原文件
    os.rename("text副本.txt", "text.txt")  # 重名命成原文件
    
                  
                

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 大方县| 图片| 滨州市| 工布江达县| 佛坪县| 伊春市| 金乡县| 广河县| 霞浦县| 晋江市| 武川县| 永定县| 鄂伦春自治旗| 鹤峰县| 正宁县| 社旗县| 蒙城县| 城固县| 盘锦市| 永胜县| 新丰县| 麦盖提县| 衡南县| 百色市| 泸定县| 承德市| 旬邑县| 科技| 巴马| 抚远县| 吉林省| 宁武县| 休宁县| 当涂县| 林州市| 大洼县| 宣威市| 郯城县| 启东市| 门头沟区| 皮山县|