1,文件操做的函數
f= open(文件名(路徑),mode="模式(r\w\a\r+\b)",encoding="字符集(GBK\UTF-8)")函數
content = f.read() \ write()spa
print(content) ip
f.close()
文件路徑:
1,絕對路徑:從磁盤的根目錄找 或者 從互聯網上
2,相對路徑:至關於當前程序所在的文件夾 ../上一層文件夾
咱們更推薦你們使用相對路徑. 由於在咱們把程序拷貝給別人使用的時候. 直接把項目拷貝走 就能運行. 可是若是用絕對路徑. 那還須要拷貝外部的文件.
2,模式 (r, w, a, r+, b 經常使用)內存
r 只讀it
1.read() 將文件中的內容所有讀取出來. 弊端: 佔內存. 若是文件過大.容易致使內存崩潰
2.read(n) 讀取n個字符. 須要注意的是. 若是再次讀取. 那麼會在當前位置繼續去讀而不是從頭讀, 若是使用的是rb模式. 則讀取出來的是n個字節
3.readline() 一次讀取⼀行數據, 注意: readline()結尾, 注意每次讀取出來的數據都會有一 個\n 因此呢. 須要咱們使用strip()方法來去掉\n或者空格
4.readlines()將每⼀行造成⼀個元素, 放到⼀個列表中. 將全部的內容都讀取出來. 因此也是容易出現內存崩潰的問題.不推薦class
5. 循環讀取. 這種⽅式是組好的. 每次讀取一⾏內容.不會產生內存溢出的問題import
注意: 讀取完的⽂件句柄⼀定要關閉 f.close()
w 模式:只寫
帶w的,只要你操做了,第一次操做就會清空原文件數據所有清空增長寫的內容,後面寫不會清空
若是文件不存在就建立文件
a 模式:追加
寫的時候,換行須要手動控制
b:處理非文本文件——wb rb ab(bytes類型)若是處理的是非文本文件,mode裏若是有b,encoding就不能給了
+:
r+:讀寫coding
最好用的讀寫同時存在的模式
r+的一個坑:不論你讀取了多少內容,不管光標在哪,寫入的時候都是在結尾寫入
w+:寫讀互聯網
清空內容,寫入
a+:寫讀追加寫讀
3, 經常使用的操做
1,光標(seek) 移動的單位是byte. 因此若是是UTF-8的中文部分要 是3的倍數
f.seek(0)——將光標移動到開頭
f.seek(0,2)——將光標移動到末尾 seek的第二個參數表⽰的是從哪一個位置進⾏偏移, 默認是0, 表示開頭, 1表示當前位置, 2表示結尾
2,tell()——拿到光標的位置
3,truncate()——截斷內容
從文件開頭截斷到光標位置
若是給參數,從頭截斷到參數位置循環
深坑請注意: 在r+模式下. 若是讀取了內容. 不論讀取內容多少. 光標顯⽰的是多少. 再寫入 或者操做⽂件的時候都是在結尾進⾏的操做. 因此若是想作截斷操做. 記住了. 要先挪動光標. 挪動到你想要截斷的位置. 而後再進⾏截斷 關於truncate(n), 若是給出了n. 則從開頭進行截斷, 若是不給n, 則從當前位置截斷. 後面 的內容將會被刪除
4,修改文件
1,引入os模塊 import os
2,打開目標文件,r
3,打開副本文件,w
4,從r中讀取內容進行修改,寫入副本中
5,刪除源文件
6,重命名副本