Python中的文件操作


一:文件的打開模式

了解過字符編碼都知道,文件都是以某一種標准編碼成二進制存在硬盤里的,在文件的默認打開模式下f = open('a.txt','rt',encoding='utf-8') 其中的t表示是以文本模式打開文件,在應用程序給操作系統發送數據請求后,操作系統在硬盤讀取二進制編碼,然后返還給應用程序,通過open方法,將編碼解碼成我們看到的字符;如果是以b模式打開文件的話,open方法不會對操作系統返回的二進制數據作處理,而是直接打印。

f = open('a.txt','rt',encoding='utf-8') 

其中的t表示是以文本模式打開文件,在應用程序給操作系統發送數據請求后,操作系統在硬盤讀取二進制編碼,然后返還給應用程序,通過open方法,將編碼解碼成我們看到的字符,那么在b模式下打開文件,操作系統返還直接是一串二進制數字

文件的三種打開方式:

只讀模式:‘r’

只寫方式:'w'

追加模式:'a'

以字節模式打開文件的話,需要注意:

一定要寫上‘b’,只能以rb,wb,ab這種形式打開文件,不能省略‘b’。

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

字節模式下讀寫都是以bytes為單位的。如果想寫入字符,需要編碼后以字節類型寫入

f = open('a.txt','wb')
f.write('你哈'.encode('utf-8'))

注意:對於非文本文件,我們只能使用字節模式,"b"表示以字節的方式操作(而所有文件也都是以字節的形式存儲的,使用這種模式無需考慮文本文件的字符編碼、圖片文件的jgp格式、視頻文件的avi格式)

二:字節模式下的操作

字節模式打開非文本文件

with open('1.jpg', 'rb') as f:  # 以只讀模式打開文件
    data = f.read()             # 讀取文件全部內容,並賦值給變量data
print(data)                     # 打印變量,我們得到是b'\xff\xd8\xff\xe0\x00這種形式的結果
print(type(data))               # 變量的類型<class 'bytes'>

with open('1.jpg','rb') as f:
        data = f.read()
print(type(data))
print(data.decode('utf-8'))      #將讀取的編碼以utf-8標准解碼
                                 #圖片文件編碼方式不是utf-8,所以不能解碼,程序報錯

以字節模式打開文本文件:

with open('db.txt', 'rb') as f:  
    data = f.read()
print(data)                  # 打印出來的是一串二進制數
print(data.decode('utf-8'))  # 把二進制數用utf-8標准解碼
print(type(data))            # 可以在屏幕上顯示人類能看懂的字符了

with open('db.txt', 'wb') as f:
    f.write('你好啊\n'.encode('utf -8')) 
在以字節打開文件時,文件的操作都要基於二進制進行了.

三:文件的修改  

文件的修改並不是我們直觀感受上的擦除重新寫上,基於硬盤的特性,任何文件的修改操作都是新內容對原內容的覆蓋。修改的概念存在於內存中,當應用程序啟動,請求操作系統從硬盤中讀取數據,讀取的數據運行在內存上,這時,我們在應用程序上的操作修改類內存上的數據內容,但是並不影響到硬盤的數據。當我們點擊保存時,新的數據會將原數據覆蓋。這時,才完成了文件的修改。

修改文件方式一:
  1:先把文件內容全部讀取
  2:在內存中修改
  3:把修改好的內容覆蓋寫入到硬盤上

with open("db.txt", "r", encoding="utf-8") as f:   # 打開文件
    data = f.read()                                # 讀取文件全部內容
    data = data.replace("你好啊:", "======")        # 修改文件內容
    
with open("db.txt", "w", encoding="utf-8") as f:   # 以‘w’模式打開,清空文件
    f.write(data)                                  # 把修改后的數據寫入

 

修改文件方式二:
  1:以讀的方式打開源文件
  2:以寫的方式打開一個新文件

import os  # 引入os模塊

with open('a.txt', 'r', encoding='utf-8') as read_f, \
        open('new.txt', 'w', encoding='utf-8') as new_f:  # 同時打開文件
    for line in read_f:                                   # 循環原文件內容
        if '你好啊' in line:
            line = line.replace('你好啊', '哈哈哈哈哈哈')  # 替換源文件內容
        new_f.write(line)                               # 把原文件循環出來的內容寫入到新文件中,
        
os.remove('a.txt')                                      # 調用OS模塊功能刪除原文件
os.rename('new.txt', 'a.txt')                           # 重命名新文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM