python基礎-文件處理

文件處理

文件三大疑問:什麼是文件?爲何要用文件?怎麼用文件?

  • 文件(文件系統)是操做系統提供給咱們操做硬盤的一個工具
  • 使用文件系統是爲了永久地保存數據

文件的操做方式

  • 相對路徑和絕對路徑python

    • 相對路徑:從當前路徑開始,相對與某個基準目錄的路徑
    • 絕對路徑:從根目錄也就是盤符開始的路徑

    在編程中,建議使用相對路徑編程

  • 操做文件的兩種方法工具

    • open學習

      語法:f = open('文件名路徑',mode,encoding) ,用於打開文件。編碼

      文件路徑:建議使用相對路徑操作系統

      mode:打開文件的模式,有三種,分別是:rwa。通常和處理文件的兩個模式套用。指針

      處理文件的兩種模式是:tbcode

      encoding:打開文件,操做文件內容的編碼設置對象

      # 第一種打開方式,這種打開方式,必須使用f.close()來關閉系統資源
      f = open("a.txt","r",encoding="utf-8")
      data = f.read()     # 讀取a.txt 文件中的所有內容
      print(data)         # 打印文件中的內容
      f.close()           # 關閉操做系統資源
      模式 描述 特色
      rt 默認模式,可簡寫爲 r。以文本文件且只讀的模式打開文件 若是文件不存在,報錯
      wt 可簡寫爲 w。以文本文件且只寫模式打開文件 若是文件不存在,建立一個新文件;若是文件中存在數據,重寫文件中的內容
      at 可簡寫爲 a,以文本文件且只寫模式打開文件 若是文件不存在,建立一個新文件;若是文件中存在數據,在數據後追加內容
      rb 二進制字符且只讀的模式打開文件 若是文件不存在,報錯
      wb 二進制字符且只寫的模式打開文件 若是文件不存在,建立一個新文件;若是文件中存在數據,重寫文件中的內容
      ab 二進制字符且只寫的模式打開文件 若是文件不存在,建立一個新文件;若是文件中存在數據,在數據後追加內容
    • with open() as …:blog

      語法:with open("文件名路徑",mode,encoding)as f:建議使用這種方式對文件進行操做,上下文關聯打開文件。優勢:不只會自動回收系統資源,且能夠同時打開多模式下的同一文件或多個文件。

      # 第二種打開方式,上下文關聯方式,會自動關閉系統資源,建議使用這種方式
      with open("a.txt","r",encoding="utf-8") as f:
          data = f.read()
          print(data)
      
      # 同時打開多個文件,用逗號分隔開
      with open("a.txt","r",encoding="utf-8")as rf,\
          open("b.txt","w",encoding="utf-8") as wf:
          data = f.read()
          wf.write(data)
  • 文件處理的內置方法

    # a.txt 文件中的內容
    姓名:sean
    年齡:18
    性別:男
    描述:上海校區最帥的人
    • 語法 說明
      f.read() 默認一次性讀取出全部的文件內容;參數根據mode的模式,若是是 t,讀取文件的字符個數;若是是 b,讀取文件的字節數
      f.readline() 一次只能讀取一行內容
      f.readlines() 將數據所有讀入內存中,以換行符分隔存入列表中
      f.readable() 判斷文件是否可讀,返回布爾值
      # 模式爲:只讀文本模式,r=rt 是read text
      with open("a.txt","r",encoding="utf-8") as f:
          print(f.readable())     # 打印結果爲:True
          print(f.readline())     # 打印結果爲:姓名:sean
          print(f.readlines())    # 打印結果爲:列表['年齡:18\n', '性別:男\n', '描述:上海校區最自戀的人']
          f.seek(0,0)             # 將光標移動到文件的開始
          print(f.read())         # 打印結果爲:全部的內容
      # 模式爲:只讀字節模式,rb 是read bytes。注意:使用字節模式,encoding參數不可用
      with open("c.txt","rb") as f:
          print(f"readable的結果:{f.readable()}")     # 打印結果:True
          print(f"read的結果:{f.read()}")         # 打印結果:文件全部內容的二進制字節
          f.seek(0,0)             # 將光標移動到文件的開始
          print(f"readline的結果:{f.readline()}")     # 打印結果:文件內容第一行記錄的二進制字節
          f.seek(0,0)
          print(f"readline的結果:{f.readlines()}")    # 打印結果:列表形式的二進制字節

      打印結果:

    • 語法 說明
      f.write() 將數據寫入文件
      f.writelines 可迭代對象的元素以字符串形式寫入文件。等價於for+write()
      f.writeable 判斷文件是否可寫,返回布爾值
      # 只寫文本模式,將文件中的原內容清空,重寫了新的內容
      with open(r"a.txt","w",encoding="utf-8") as wf:
          print(f"是否可讀:{wf.readable()}")      
          print(f"是否可寫:{wf.writable()}")
          wf.write("這是使用write新寫入的內容\n")
          wf.writelines(["這是使用writelines新寫入的內容1\n","這是使用writelines新寫入的內容2\n","這是使用writelines新寫入的內容3\n"])      # 列表中的內容會拼接起來寫入文件中
      
      # 驗證是否將內容寫入到a.txt 文件中
      with open(r"a.txt","r",encoding="utf-8") as  rf:
          print(rf.read())

      操做結果

      # 追加文本模式,保留文件中原來的內容,並在後面追加新的數據
      with open(r"a.txt","a",encoding="utf-8") as af:
          print(f"是否可讀:{af.readable()}")
          print(f"是否可寫:{af.writable()}")
          af.write("這是使用追加模式write寫入的內容\n")
          af.writelines(["這是使用追加模式writelines新寫入的內容1\n","這是使用追加模式writelines新寫入的內容2\n","這是使用追加模式writelines新寫入的內容3\n"])
      # 驗證是否將內容寫入到a.txt 文件中
      with open(r"a.txt","r",encoding="utf-8") as  rf:
          print(rf.read())

      操做結果

      1573219631390

    • 光標(指針)的操做

      語法 描述
      f.seek(offset,whence) offsetf:相對偏移度,也就是光標移動的位數,針對的是字節
      whence:用於指定光標位置從哪裏開始。
      值只能是:0(文件開頭),1(當前位置),2(文件末尾)。
      f.tell() 光標所在的位置
  • 注意:
    • utf-8 中,中文字符佔3bytes,英文字符佔1bytes
    • gbk 中,中文字符佔2bytes,英文字符佔1bytes
    • 操做文件時,必定要注意編碼規則問題,謹記保證不亂碼的核心:用什麼編碼存的數據,就用什麼編碼取

#### 擴展

咱們學習的讀取文件 rwa 是純淨模式,還有 r+w+a+模式。這三種模式設置成了可讀可寫模式,其餘特性跟純淨模式是同樣的。

相關文章
相關標籤/搜索