詳解Python中的文件操作
一:文件的打開(kāi)模式
了解過(guò)字符編碼都知道,文件都是以某一種標(biāo)準(zhǔn)編碼成二進(jìn)制存在硬盤里的,在文件的默認(rèn)打開(kāi)模式下f = open('a.txt','rt',encoding='utf-8') 其中的t表示是以文本模式打開(kāi)文件,在應(yīng)用程序給操作系統(tǒng)發(fā)送數(shù)據(jù)請(qǐng)求后,操作系統(tǒng)在硬盤讀取二進(jìn)制編碼,然后返還給應(yīng)用程序,通過(guò)open方法,將編碼解碼成我們看到的字符;如果是以b模式打開(kāi)文件的話,open方法不會(huì)對(duì)操作系統(tǒng)返回的二進(jìn)制數(shù)據(jù)作處理,而是直接打印。
f = open('a.txt','rt',encoding='utf-8')
其中的t表示是以文本模式打開(kāi)文件,在應(yīng)用程序給操作系統(tǒng)發(fā)送數(shù)據(jù)請(qǐng)求后,操作系統(tǒng)在硬盤讀取二進(jìn)制編碼,然后返還給應(yīng)用程序,通過(guò)open方法,將編碼解碼成我們看到的字符,那么在b模式下打開(kāi)文件,操作系統(tǒng)返還直接是一串二進(jìn)制數(shù)字
文件的三種打開(kāi)方式:
只讀模式:‘r'
只寫方式:'w'
追加模式:'a'
以字節(jié)模式打開(kāi)文件的話,需要注意:
一定要寫上‘b',只能以rb,wb,ab這種形式打開(kāi)文件,不能省略‘b'。
f = open('a.txt','rb')
f = open('a.txt','wb')
f = open('a.txt','ab')
#錯(cuò)誤寫法
f = open('a.txt','r') #未注明以b模式打開(kāi),這種寫法是默認(rèn)文本模式打開(kāi)
f = open('a.txt','rb',encode = 'utf-8') #b模式打開(kāi),不能傳入編碼方式
字節(jié)模式下讀寫都是以bytes為單位的。如果想寫入字符,需要編碼后以字節(jié)類型寫入
f = open('a.txt','wb')
f.write('你哈'.encode('utf-8'))
注意:對(duì)于非文本文件,我們只能使用字節(jié)模式,"b"表示以字節(jié)的方式操作(而所有文件也都是以字節(jié)的形式存儲(chǔ)的,使用這種模式無(wú)需考慮文本文件的字符編碼、圖片文件的jgp格式、視頻文件的avi格式)
二:字節(jié)模式下的操作
字節(jié)模式打開(kāi)非文本文件
with open('1.jpg', 'rb') as f: # 以只讀模式打開(kāi)文件
data = f.read() # 讀取文件全部?jī)?nèi)容,并賦值給變量data
print(data) # 打印變量,我們得到是b'\xff\xd8\xff\xe0\x00這種形式的結(jié)果
print(type(data)) # 變量的類型<class 'bytes'>
with open('1.jpg','rb') as f:
data = f.read()
print(type(data))
print(data.decode('utf-8')) #將讀取的編碼以u(píng)tf-8標(biāo)準(zhǔn)解碼
#圖片文件編碼方式不是utf-8,所以不能解碼,程序報(bào)錯(cuò)
以字節(jié)模式打開(kāi)文本文件:
with open('db.txt', 'rb') as f:
data = f.read()
print(data) # 打印出來(lái)的是一串二進(jìn)制數(shù)
print(data.decode('utf-8')) # 把二進(jìn)制數(shù)用utf-8標(biāo)準(zhǔn)解碼
print(type(data)) # 可以在屏幕上顯示人類能看懂的字符了
with open('db.txt', 'wb') as f:
f.write('你好啊\n'.encode('utf -8'))
在以字節(jié)打開(kāi)文件時(shí),文件的操作都要基于二進(jìn)制進(jìn)行了.
三:文件的修改
文件的修改并不是我們直觀感受上的擦除重新寫上,基于硬盤的特性,任何文件的修改操作都是新內(nèi)容對(duì)原內(nèi)容的覆蓋。修改的概念存在于內(nèi)存中,當(dāng)應(yīng)用程序啟動(dòng),請(qǐng)求操作系統(tǒng)從硬盤中讀取數(shù)據(jù),讀取的數(shù)據(jù)運(yùn)行在內(nèi)存上,這時(shí),我們?cè)趹?yīng)用程序上的操作修改類內(nèi)存上的數(shù)據(jù)內(nèi)容,但是并不影響到硬盤的數(shù)據(jù)。當(dāng)我們點(diǎn)擊保存時(shí),新的數(shù)據(jù)會(huì)將原數(shù)據(jù)覆蓋。這時(shí),才完成了文件的修改。
修改文件方式一:
1:先把文件內(nèi)容全部讀取
2:在內(nèi)存中修改
3:把修改好的內(nèi)容覆蓋寫入到硬盤上
with open("db.txt", "r", encoding="utf-8") as f: # 打開(kāi)文件
data = f.read() # 讀取文件全部?jī)?nèi)容
data = data.replace("你好啊:", "======") # 修改文件內(nèi)容
with open("db.txt", "w", encoding="utf-8") as f: # 以‘w'模式打開(kāi),清空文件
f.write(data) # 把修改后的數(shù)據(jù)寫入
修改文件方式二:
1:以讀的方式打開(kāi)源文件
2:以寫的方式打開(kāi)一個(gè)新文件
import os # 引入os模塊
with open('a.txt', 'r', encoding='utf-8') as read_f, \
open('new.txt', 'w', encoding='utf-8') as new_f: # 同時(shí)打開(kāi)文件
for line in read_f: # 循環(huán)原文件內(nèi)容
if '你好啊' in line:
line = line.replace('你好啊', '哈哈哈哈哈哈') # 替換源文件內(nèi)容
new_f.write(line) # 把原文件循環(huán)出來(lái)的內(nèi)容寫入到新文件中,
os.remove('a.txt') # 調(diào)用OS模塊功能刪除原文件
os.rename('new.txt', 'a.txt') # 重命名新文件
以上就是詳解Python中的文件操作的詳細(xì)內(nèi)容,更多關(guān)于python 文件操作的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python使用flask-caching緩存數(shù)據(jù)的示例代碼
Flask-Caching 是 Flask 的一個(gè)擴(kuò)展,為任何 Flask 應(yīng)用程序添加了對(duì)各種后端的緩存支持,它基于 cachelib 運(yùn)行,并通過(guò)統(tǒng)一的 API 支持 werkzeug 的所有原始緩存后端,本文給大家介紹了Python使用flask-caching緩存數(shù)據(jù),需要的朋友可以參考下2024-12-12
OpenCV實(shí)戰(zhàn)案例之車道線識(shí)別詳解
計(jì)算機(jī)視覺(jué)在自動(dòng)化系統(tǒng)觀測(cè)環(huán)境、預(yù)測(cè)該系統(tǒng)控制器輸入值等方面起著至關(guān)重要的作用,下面這篇文章主要給大家介紹了關(guān)于OpenCV實(shí)戰(zhàn)案例之車道線識(shí)別的相關(guān)資料,需要的朋友可以參考下2022-10-10
詳解Python中的時(shí)間格式的讀取與轉(zhuǎn)換(time模塊)
這篇文章主要介紹了Python中的時(shí)間格式的讀取與轉(zhuǎn)換(time模塊),文末給大家介紹了python的時(shí)間獲取與轉(zhuǎn)化:time模塊和datetime模塊的相關(guān)知識(shí),需要的朋友可以參考下2023-05-05
django第一個(gè)項(xiàng)目127.0.0.1:8000不能訪問(wèn)的解決方案詳析
django項(xiàng)目服務(wù)啟動(dòng)后無(wú)法通過(guò)127.0.0.1訪問(wèn),下面這篇文章主要給大家介紹了關(guān)于django第一個(gè)項(xiàng)目127.0.0.1:8000不能訪問(wèn)的解決方案,需要的朋友可以參考下2022-10-10
Python實(shí)現(xiàn)提取Word文檔中的文本和圖片
將內(nèi)容從?Word?文檔中提取出來(lái)可以方便我們對(duì)其進(jìn)行其他操作,如將內(nèi)容儲(chǔ)存在數(shù)據(jù)庫(kù)中,本文將介紹如何使用簡(jiǎn)單的代碼實(shí)現(xiàn)從?Word?文檔中提取文本和圖片內(nèi)容并保存,需要的可以參考下2023-12-12
如何實(shí)現(xiàn)在遠(yuǎn)程linux服務(wù)器上運(yùn)行python代碼
這篇文章主要介紹了如何實(shí)現(xiàn)在遠(yuǎn)程linux服務(wù)器上運(yùn)行python代碼問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12

