開啟檔案,得到檔案的物件(控制代碼)
通過檔案物件(控制代碼)操作檔案
儲存並關閉檔案
在 python中使用open() 函式來操作檔案。
開啟檔案,得到檔案控制代碼,並把乙個變數名分配給這個檔案控制代碼
變數名 =
open
('檔案路徑'
,'開啟模式'
, encoding =
'字元編碼'
)f_obj =
open
('a.txt'
,'r'
, encoding=
'utf-8'
)通過控制代碼對檔案進行操作
data = f_obj.read(
)print
(data)
關閉檔案
f_obj.close(
)字元編碼的問題
f=open(.
..) 是由作業系統開啟檔案,那麼如果我們沒有指定編碼,那麼開啟檔案的預設編碼很明顯是作業系統說了算,作業系統會用自己的預設編碼去開啟檔案,預設情況下,在 windows 下是 gbk,在 linux 下是 utf-
8。若要保證不亂碼,檔案以什麼方式儲存的,就要以什麼方式開啟。
三、 檔案開啟模式
開啟檔案的模式有:
文字方式操作
r 唯讀模式【預設】
w 只寫模式【不可讀;不存在則建立;存在則清空原來的內容再寫新內容;】
a 追加模式【不可讀;不存在則建立;存在則以追加的方式寫入新的內容;】
位元組方式操作
b 表示以位元組的方式操作,不需要編碼的引數 encoding
rb 位元組方式讀取
wb 位元組方式寫入,清空原檔案內容
ab 位元組方式的追加寫入
注意:以b方式開啟時,讀取到的內容是位元組型別,寫入時也需要提供位元組型別
四、檔案操作
3. 讀操作
f_obj =
open
('./a.txt'
,'r'
)# 讀全部
content = f_obj.read(
)print
(content)
# 每次讀一行
line1 = f_obj.readline(
)line2 = f_obj.readline(
)line3 = f_obj.readline(
)# 一次讀完,把每一行的內容放在列表中,成為列表中的乙個元素
line_list = f_obj.readlines()2
. 寫操作
a. 寫普通的文字
f_obj =
open
('a.txt'
,'w'
)# 針對文字模式的寫,需要自己寫換行符
f_obj.write(
'楊哥\n'
)f_obj.write(
'千鋒\n'
)f_obj.close(
)b. 寫 bytes 內容
f_obj =
open
('b.txt'
,'wb'
)# 定義 bytes 內容, 兩種方式都可以
b1 =
bytes
('千鋒\n'
, encoding=
'utf-8'
)b2 =
'楊哥\n'
.encode(
'utf-8'
)# 可以用 writelines() 一次性寫入多行
f_obj.writelines(
[b1, b2]
)f_obj.close()3
. 其他方法和屬性
f.name # 檔名
f.closed # 檔案是否關閉
f.readable(
)# 檔案是否可讀
f.writable(
)# 檔案是否可寫
f.flush(
)# 立刻將檔案內容從記憶體刷到硬碟
五、with 語句管理上下文
在實際的程式設計中,我們會經常忘記關閉已經開啟的檔案物件,這樣就會導致系統資源的浪費。
with
open
('f1.txt'
,'r'
, encoding=
'utf-8'
)as f:
content = f.read(
)print
(content)
print
('此時檔案已經自動關閉了'
)使用 with 語句來管理上下文 ,操作之後,python 內部會自動關閉並釋放檔案資源。
六、檔案的修改
檔案的資料是存放於硬碟上的,因而只存在覆蓋、不存在修改這麼一說,我們平時看到的修改檔案,都是模擬出來的效果。
就是先把要修改的檔案內容讀取到記憶體中,在記憶體中修改;
之後再把修改好的內容先存到乙個臨時的檔案中;
最後把原來的檔案刪除,再把臨時的檔案的檔名修改為原來檔案的檔名。
流程解析
「」"把原始檔內容 讀到記憶體中
在記憶體中修改檔案的內容
把修改好的檔案內容存到另外乙個臨時的檔案中
把原檔案刪除
把臨時檔案的檔名修改為 原檔案的檔名
# 1. 把原始檔內容 讀到記憶體中
with
open
('a.txt'
,'r'
, encoding=
'utf-8'
)as rf,
open
('.a.txt.swap'
,'w'
, encoding=
'utf-8'
)as wf:
content = rf.read(
)# 2. 在記憶體中修改檔案的內容
new_content = content.replace(
'你好'
,'world'
)# 3. 把修改好的檔案內容存到另外乙個臨時的檔案中
wf.write(new_content)
# 4. 把原檔案刪除
import os
os.remove(
'a.txt'
)# 5. 把臨時檔案的檔名修改為 原檔案的檔名
os.rename(
'.a.txt.swap'
,'a.txt'
)python 中,具體的說有兩種實現方式:
注意自己操作的檔案的路徑、許可權、當初用什麼編碼寫入的。比如你是在 windows 系統下建立並寫入的檔案,字元編碼預設是 gbk。
方式一:將硬碟存放的該檔案的內容全部載入到記憶體,進行修改。
import os
with
open
('a.txt'
,'r'
, encoding=
'utf-8'
)as read_f,
open
('.a.txt.swap'
,'w'
, encoding=
'utf-8'
)as write_f:
r_data=read_f.read(
)# 全部讀入記憶體,如果檔案很大,會很卡
w_data=r_data.replace(
'千鋒'
,'千鋒教育'
)# 在記憶體中完成修改
write_f.write(w_data)
# 一次性寫入新檔案
os.remove(
'a.txt'
)os.rename(
'.a.txt.swap'
,'a.txt'
)
方式二:將硬碟存放的該檔案的內容讀一行,改一行,存一行。
import os
with
open
('a.txt'
,'r'
, encoding=
'utf-8'
)as read_f,
open
('.a.txt.swap'
,'w'
, encoding=
'utf-8'
)as write_f:
for line in read_f:
line=line.replace(
'楊哥'
,'yangge'
) write_f.write(line)
os.remove(
'a.txt'
)os.rename(
'.a.txt.swap'
,'a.txt'
)
Python 操作檔案
字元 含義 r 以唯讀方式開啟 預設 w 以只寫方式開啟,刪除原有檔案內容 如果檔案不存在,則建立該檔案並以只寫方式開啟 x 建立乙個新檔案,並以寫模式開啟這個檔案,如果檔案存在則會產生 fileexistserror 錯誤 a 以只寫檔案開啟乙個檔案,如果有原檔案則追加到檔案末尾 b 用二進位制模...
Python 操作檔案
今天,我們來學習python開啟,修改檔案的方法。先在專案資料夾下新建兩個檔案 text1.txt和text2.txt,在text2中寫入 i like python.換行 it is fun.換行 下面我們用這兩個檔案探索操作檔案的方法。如何在python中開啟乙個檔案物件呢?with open ...
Python操作檔案
python 的 open 方法用於開啟乙個檔案,該方法返回乙個檔案物件,在對檔案進行處理過程都需要使用到這個函式,如果該檔案無法被開啟,會丟擲 oserror。注意 使用 open 方法後一定要保證關閉檔案物件,即呼叫 close 方法。open 函式常用形式是接收兩個引數 檔案路徑 file 和...