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. 重命名副本
修改⽂件以及另⼀種打開文件的方式
⽂件修改: 只能將文件中的內容讀取到內存中, 將信息修改完畢, 然后將源⽂件刪除, 將新⽂件的名字改成老⽂件的名字.