python3-cookbook中每個小節以問題、解決方案和討論三個部分探討了Python3在某類問題中的最優解決方式,或者說是探討Python3本身的資料結構、函式、類等特性在某類問題上如何更好地使用,這本書對于加深Python3的理解和提升Python編程能力的都有顯著幫助,特別是對怎么提高Python程式的性能會有很好的幫助,如果有時間的話強烈建議看一下,
本文為學習筆記,文中的內容只是根據自己的作業需要和平時使用寫了書中的部分內容,并且文中的示例代碼大多直接貼的原文代碼,當然,代碼都在Python3.6的環境上都驗證過了的,不同領域的編程關注點也會有所不同,有興趣的可以去看全文,
python3-cookbook:https://python3-cookbook.readthedocs.io/zh_CN/latest/index.html
5.1 讀寫文本資料
使用open打開文本檔案時,Python會默認將換行符轉換為\n,如果不想Python進行默認的轉換,可以使用引數newline=''以保留原來的換行符,
當使用默認的編碼不能正確讀取資料時,open還有一個encoding引數用來指定以哪種編碼打開檔案,
>>> f = open('hello.txt', 'rt') >>> f.read() 'hello world!\n' >>> g = open('hello.txt', 'rt', newline='') >>> g.read() 'hello world!\r\n' >>>
5.4 讀寫位元組資料
使用open函式的rb或wb進行二進制的資料讀寫的時候,比如圖片或音頻資料,需要注意以下幾點:
- 讀取二進制資料時,回傳的資料都是位元組字串格式的,而不是文本字串格式,
- 寫入二進制資料的時候,也需要保證是以位元組形式的物件進行寫入,
- 在二進制格式的檔案中讀取或寫入文本資料時,需要進行相應的解碼和編碼操作,
- 對于位元組字串,通過下標索引或迭代的時候,回傳的是對應的位元組值,即一個數字,而不是位元組字串,
with open('somefile.bin', 'rb') as f: # 讀取出來的是位元組字串 data =https://www.cnblogs.com/guyuyun/p/ f.read() # 解碼為文本字串 text = data.decode('utf-8') with open('somefile.bin', 'wb') as f: # 以位元組物件的形式寫入 f.write(b'Hello World') # 編碼后寫入檔案 text = 'Hello World' f.write(text.encode('utf-8'))
>>> t = 'hello world' >>> t[0] 'h' >>> for c in t: print(c) h e l l o w o r l d >>> b = b'hello world' >>> b[0] 104 >>> for c in b: print(c) 104 101 108 108 111 32 119 111 114 108 100 >>>
5.7 讀寫壓縮檔案
讀寫壓縮檔案還是比較常用的,Python對于gzip和bz2格式的壓縮檔案操作還是有很好的支持的,即gzip模塊和bz2模塊,這兩個模塊有和內置open函式一樣的函式,包括引數的使用也是一樣的,但是需要注意的是這兩個模塊默認是以二進制來打開的,所以你想要讀寫文本資料時就需要指定對應的rt和wt模式了,
在寫入壓縮資料時,這兩個模塊還有一個壓縮比引數compresslevel,默認為最高級別9,等級越低性能越好,但是資料壓縮程度也越低,
import gzip # gzip和bz2的open函式使用方法一樣,就只貼gzip的示例代碼了 # 默認一個二進制模式打開,文本檔案需要指定rt模式 with gzip.open('somefile.gz', 'rt') as f: text = f.read() with gzip.open('somefile.gz', 'wt') as f: f.write(text)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/190366.html
標籤:Python
