1. 程式人生 > >Python小記--二進位制方式檔案讀寫實踐

Python小記--二進位制方式檔案讀寫實踐

二進位制檔案讀寫探究

昨天的檔案讀寫簡潔方案使用了with語法代替try…except….finally進行文字檔案讀寫,今天補充一下讀寫二進位制檔案內容。
其實所有檔案都可以當做二進位制檔案來處理,至於為什麼會有文字檔案和二進位制檔案的說法,個人認為是為了進行邏輯上的區分吧~這個今天先不去探究。
我選取了兩種檔案型別,.docx和.jpg來進行測試:

.docx格式:

word其中包含了文字和圖片,模仿昨天程式碼,複製一個docx檔案如下:

with open('file/python.docx', 'rb') as f:
    with open('file/pythonCopy.docx'
, 'wb') as w: for line in f.readlines(): w.write(line.strip()) print('done.')

經測試,控制檯列印了”done.”,說明程式並沒有報錯並且成功執行完畢。
但是當我嘗試開啟pythonCopy.docx檔案時,卻報出以下錯誤:

可惡的錯誤

隨後我比較了一下兩個檔案的大小,發現都是一樣的31kb,並且我想由於採用的二進位制方式讀取和寫入,就不應該存在檔案編碼的問題。於是再次思考程式的執行過程:

  1. 讀取檔案,正常;
  2. 建立輸出流,沒有報錯所以也應該是正常的;
  3. 寫入新檔案,檔案大小一致,所以寫入的資料應該是沒錯
    的,但是寫入方式呢?不懂所以回頭檢查一遍!

於是發現了一個問題,我的寫入語句如下:

w.write(line.strip())

猛然發現在這裡我呼叫了strip()方法,這個方法作用是去除字串首尾的空格,類似java中的trim()方法,問題很可能就出在這裡!二進位制資料被篡改導致檔案損壞!
去掉一試,大功告成!

.jpg檔案

要說二進位制檔案,圖片和視訊才是貨真價實毫無爭議的二進位制檔案,此處不應有大問題,程式碼如下:

with open('file/python.jpg', 'rb') as f:
    with open('file/pythonCopy.jpg'
, 'wb') as w: for line in f.readlines(): w.write(line) print('done.')

此次完美複製!

踏平一切坑!2017年8月15日20:39:43 於輝煌時代