溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

怎么在Python中對(duì)文件進(jìn)行操作

發(fā)布時(shí)間:2021-01-15 15:04:47 來(lái)源:億速云 閱讀:139 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

今天就跟大家聊聊有關(guān)怎么在Python中對(duì)文件進(jìn)行操作,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

一:文件的打開(kāi)模式

了解過(guò)字符編碼都知道,文件都是以某一種標(biāo)準(zhǔn)編碼成二進(jìn)制存在硬盤(pá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)在硬盤(pán)讀取二進(jìn)制編碼,然后返還給應(yīng)用程序,通過(guò)open方法,將編碼解碼成我們看到的字符;如果是以b模式打開(kāi)文件的話(huà),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)在硬盤(pán)讀取二進(jìn)制編碼,然后返還給應(yīng)用程序,通過(guò)open方法,將編碼解碼成我們看到的字符,那么在b模式下打開(kāi)文件,操作系統(tǒng)返還直接是一串二進(jìn)制數(shù)字

文件的三種打開(kāi)方式:

只讀模式:‘r'

只寫(xiě)方式:'w'

追加模式:'a'

以字節(jié)模式打開(kāi)文件的話(huà),需要注意:

一定要寫(xiě)上‘b',只能以rb,wb,ab這種形式打開(kāi)文件,不能省略‘b'。

f = open('a.txt','rb')  
f = open('a.txt','wb') 
f = open('a.txt','ab') 
#錯(cuò)誤寫(xiě)法
f = open('a.txt','r') #未注明以b模式打開(kāi),這種寫(xiě)法是默認(rèn)文本模式打開(kāi) 
f = open('a.txt','rb',encode = 'utf-8') #b模式打開(kāi),不能傳入編碼方式

字節(jié)模式下讀寫(xiě)都是以bytes為單位的。如果想寫(xiě)入字符,需要編碼后以字節(jié)類(lèi)型寫(xiě)入

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))        # 變量的類(lèi)型<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))      # 可以在屏幕上顯示人類(lèi)能看懂的字符了

with open('db.txt', 'wb') as f:
  f.write('你好啊\n'.encode('utf -8'))

在以字節(jié)打開(kāi)文件時(shí),文件的操作都要基于二進(jìn)制進(jìn)行了.

三:文件的修改  

文件的修改并不是我們直觀感受上的擦除重新寫(xiě)上,基于硬盤(pán)的特性,任何文件的修改操作都是新內(nèi)容對(duì)原內(nèi)容的覆蓋。修改的概念存在于內(nèi)存中,當(dāng)應(yīng)用程序啟動(dòng),請(qǐng)求操作系統(tǒng)從硬盤(pán)中讀取數(shù)據(jù),讀取的數(shù)據(jù)運(yùn)行在內(nèi)存上,這時(shí),我們?cè)趹?yīng)用程序上的操作修改類(lèi)內(nèi)存上的數(shù)據(jù)內(nèi)容,但是并不影響到硬盤(pán)的數(shù)據(jù)。當(dāng)我們點(diǎn)擊保存時(shí),新的數(shù)據(jù)會(huì)將原數(shù)據(jù)覆蓋。這時(shí),才完成了文件的修改。

修改文件方式一:
  1:先把文件內(nèi)容全部讀取
  2:在內(nèi)存中修改
  3:把修改好的內(nèi)容覆蓋寫(xiě)入到硬盤(pán)上

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ù)寫(xiě)入

修改文件方式二:

  1:以讀的方式打開(kāi)源文件
  2:以寫(xiě)的方式打開(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)容寫(xiě)入到新文件中,
    
os.remove('a.txt')                   # 調(diào)用OS模塊功能刪除原文件
os.rename('new.txt', 'a.txt')              # 重命名新文件

看完上述內(nèi)容,你們對(duì)怎么在Python中對(duì)文件進(jìn)行操作有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI