1. 程式人生 > >Python基礎8_檔案處理

Python基礎8_檔案處理

一. 初始檔案操作
使用open()函式來開啟檔案,獲取到檔案控制代碼
f = open("檔名", mode = "模式", encoding = "utf-8")
encoding表示編碼集,根據檔案的實際儲存編碼進行獲取資料,我們多用utf-8
絕對路徑和相對路徑:
絕對路徑:從磁碟根目錄開始一直到檔名 d:\資料夾\檔名
相對路徑:相對於當前程式所在的資料夾,如果在同一個資料夾內,則相對路徑就是這個檔名,如果不在同一個資料夾,則要退出資料夾(../),再進入資料夾(資料夾/)
推薦用相對路徑,因為把程式拷貝給別人使用的時候,直接把專案拷貝走就行,但是如果用絕對路徑,那還需要拷貝外部的檔案
二. 只讀操作(r,rb)
rb. 讀取出來的資料型別是bytes型別,在rb模式下,不能選擇encoding字符集
在讀取非文字檔案的時候,比如讀取MP3.影象.視訊等資訊的時候就需要用到rb,因為這種資料是沒辦法直接顯示出來的,在後面我們檔案上傳下載的時候還會用到
讀取檔案的方法:
1. f.read() 將檔案中的內容全部讀取出來, 弊端:佔記憶體,如果檔案過大,容易導致記憶體崩潰
2. f.read(n) 讀取n個字元,需要注意的是,如果再次讀取,那麼會在當前位置繼續去讀而不是從頭開始,如果使用的是rb模式,則讀取出來的是n個位元組
3. f.readline() 一次讀取一行資料, 注意:每次讀取出來的資料都會有一個\n,所以需要我們使用strip()方法來去掉\n或者空格
4. f.readlines() 將每一行形成一個元素放到一個列表中,將所有的資料都讀取出來,所以也會出現記憶體崩潰的問題
5. 迴圈讀取 這種方法是最好的,每次讀取一行內容,不會產生記憶體溢位的問題
注意:讀取玩的控制代碼一定要關閉 f.close()
三. 只寫模式(w,wb)
寫的時候,如果沒有檔案,則會建立檔案,如果檔案存在,則將原始檔中的內容刪除,再寫入新內容
wb模式下,可以不指定開啟檔案的編碼,但是在寫檔案的時候必須將字串轉換成utf-8的bytes資料型別 f.write("內容", encode("utf-8))
四. 追加(a,ab)
在追加模式下,我們寫入的內容會追加在檔案的結尾
五. 讀寫模式(r+,r+b)
對於讀寫模式,必須是先讀,因為預設游標是在開頭的準備讀取的,當讀取完了之後再進行寫入,我們以後使用高的模式是r+
正常的讀取之後,寫在結尾
六. 寫讀模式(w+,w+b)
先將所有的內容清空,然後寫入,最後讀取,但是讀取的內容時空的,不常用
七. 追加讀(a+)
不論先讀還是先寫,都是讀取不到資料的
八. 其他相關的操作
1. f.seek(n) 游標移動n個位元組,所以如果是utf-8的中文,是3的倍數
seek(num1,num2) num1表示偏移量,num2表示從哪個位置進行偏移,預設是0,表示開頭,1表示當前位置,2表示結尾
2. f.tell() 獲取當前游標所在的位置 單位也是位元組
3. f.truncate() 擷取檔案
如果想要截斷操作,要先挪動游標,挪動到想要截斷的位置,再進行截斷
注意:在r+模式下,如果讀取了內容,不論讀取內容多少,游標顯示的是多少,再寫入或者操作檔案的時候都是在結尾進行的操作
九. 修改檔案以及另一種開啟檔案的方式
檔案修改:只能講檔案中的內容讀取到記憶體中,將資訊修改完畢,然後將原始檔刪除,將新檔案的名字改成老檔案的名字
import os
os.remove()
os.rename()
弊端:一次將所有的內容讀取,記憶體溢位,解決方案,一行一行的讀取和操作
for line in f: