Python文件操作讀,寫,追加以及文件修改


1. 文件操作的函數
open(文件名(路徑), mode="?", encoding="字符集")
  需要注意encoding表⽰編碼集. 根據⽂件的實際保存編碼進行獲取數據, 對於我們⽽⾔. 更多的是utf-8.
2. 模式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b
    r  只讀
w  只寫
a  追加
r+  讀寫
w+  寫讀
a+  追加寫讀

b  處理非文本文件
rb  只讀字節
wb  只寫字節
   ab  追加字節

  需要注意encoding表示編碼集. 根據文件的實際保存編碼進行獲取數據, 對於我們⽽言. 更多的是utf-8.

  rb. 讀取出來的數據是bytes類型, 在rb模式下. 不能選擇encoding字符集.

  rb的作用: 在讀取非⽂本文件的時候. 比如讀取MP3. 圖像. 視頻等信息的時候就需要⽤到 rb. 因為這種數據是沒辦法直接顯⽰出來的. 在后面我們⽂件上傳下載的時候還會用到. 還有.我們看的直播. 實際上都是這種數據.

  絕對路徑和相對路徑:

    1. 絕對路徑:從磁盤根⽬錄開始一直到文件名.
    2. 相對路徑:同⼀個⽂件夾下的文件.相對於當前這個程序所在的⽂件夾⽽言.如果在同一個⽂件夾中. 則相對路徑就是這個文件名. 如果在上一層文件夾. 則要../

  我們更推薦大家使⽤相對路徑. 因為在我們把程序拷貝給別人使⽤的時候. 直接把項⽬拷⻉走就能運行. 但是如果用絕對路徑. 那還需要拷⻉外部的⽂件.

  讀取⽂件的方法(r,rb):
    1. read() 將文件中的內容全部讀取出來. 弊端: 占內存. 如果⽂件過大.容易導致內存崩潰

    2. read(n)讀取n個字符.需要注意的是.如果再次讀取.那么會在當前位置繼續去讀⽽不是從頭讀, 如果使用的是rb模式. 則讀取出來的是n個字節

    3. readline() ⼀次讀取⼀⾏數據, 注意: readline()結尾, 注意每次讀取出來的數據都會有⼀個\n 所以呢. 需要我們使⽤strip()⽅法來去掉\n或者空格

    4. readlines()將每一⾏形成⼀個元素,放到⼀個列表中.將所有的內容都讀取出來.所以也是. 容易出現內存崩潰的問題.不推薦使⽤

    5. 循環讀取.這種⽅式是最好的.每次讀取⼀⾏內容.不會產生內存溢出的問題.

  注意: 讀取完的⽂件句柄⼀定要關閉 close()

  寫模式(w, wb)

    1.寫的時候注意. 如果沒有文件. 則會創建⽂件, 如果⽂件存在. 則將原件中原來的內容刪除, 再 寫入新內容

    2.wb模式下. 可以不指定打開文件的編碼. 但是在寫⽂件的時候必須將字符串轉化成utf-8的 bytes數據

  追加(a, ab)
    1.在追加模式下. 我們寫入的內容會追加在⽂件的結尾.

  讀寫模式(r+, r+b)
    對於讀寫模式. 必須是先讀. 因為默認光標是在開頭的. 准備讀取的. 當讀完了之后再進⾏寫入. 我們以后使⽤頻率最⾼的模式就是r+

    所以記住: r+模式下. 必須是先讀取. 然后再寫入

  寫讀(w+, w+b)

    先將所有的內容清空. 然后寫入. 最后讀取. 但是讀取的內容是空的, 不常⽤

  追加讀(a+)

    a+模式下, 不論先讀還是后讀. 都是讀取不到數據的.

3. 常用的操作
1. 光標(seek)*
seek(0) 開頭
seek(0,2) 結尾

      seek(n) 光標移動到n位置, 注意, 移動的單位是byte. 所以如果是UTF-8的中文部分要是3的倍數.

      通常我們使用seek都是移動到開頭或者結尾.
      移動到開頭: seek(0)
      移動到結尾: seek(0,2) seek的第二個參數表⽰的是從哪個位置進⾏偏移, 默認是0, 表⽰開頭, 1表示當前位置, 2表⽰結尾

    3. truncate()截斷⽂文件

      深坑請注意: 在r+模式下. 如果讀取了內容. 不論讀取內容多少. 光標顯⽰的是多少. 在寫入或者操作文件的時候都是在結尾進⾏的操作.

      所以如果想做截斷操作. 記住了. 要先挪動光標. 挪動到你想要截斷的位置. 然后再進⾏截斷

      關於truncate(n), 如果給出了n. 則從開頭開頭進⾏截斷, 如果不給n, 則從當前位置截斷. 后⾯的內容將會被刪除

 2. tell() 光標的位置
     
tell()使用  tell()可以幫我們獲取到當前光標在么位置
3. truncate 截斷文件

      深坑請注意: 在r+模式下. 如果讀取了內容. 不論讀取內容多少. 光標顯⽰的是多少. 在寫入或者操作文件的時候都是在結尾進⾏的操作.

      所以如果想做截斷操作. 記住了. 要先挪動光標. 挪動到你想要截斷的位置. 然后再進⾏截斷

      關於truncate(n), 如果給出了n. 則從開頭開頭進⾏截斷, 如果不給n, 則從當前位置截斷. 后⾯的內容將會被刪除

4. 修改文件
1. 引入os模塊
2. 打開目標文件, r
3. 打開文件副本, w
4. 從r中讀取內容進行修改. 寫入到副本中
5. 刪除源文件
6. 重命名副本

    修改⽂件以及另⼀種打開文件的方式
    ⽂件修改: 只能將文件中的內容讀取到內存中, 將信息修改完畢, 然后將源⽂件刪除, 將新⽂件的名字改成老⽂件的名字.

 


免責聲明!

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



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