Python小記--二進位制方式檔案讀寫實踐
阿新 • • 發佈:2019-02-04
二進位制檔案讀寫探究
昨天的檔案讀寫簡潔方案使用了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,並且我想由於採用的二進位制方式讀取和寫入,就不應該存在檔案編碼的問題。於是再次思考程式的執行過程:
- 讀取檔案,正常;
- 建立輸出流,沒有報錯所以也應該是正常的;
- 寫入新檔案,檔案大小一致,所以寫入的資料應該是沒錯
於是發現了一個問題,我的寫入語句如下:
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 於輝煌時代