Python讀寫二進位制檔案
Python讀寫二進位制檔案
使用python語言直接讀取普通檔案,可以使用
open('filepath/filename','r')
open函式中,第一個參數列示讀取檔案的路徑,第二個參數列示開啟檔案的模式,
-
‘r’表示只讀(預設,如果檔案不存在,則會丟擲錯誤)
-
‘w’表示只寫(如果檔案不存在,則自動建立檔案)
-
‘a’表示 新寫入的內容附加到檔案的末尾
-
‘r+’表示 讀寫
如果要以二進位制的方式開啟檔案,需要在第二個引數加上字元“b”(例如,“rb”,“wb”等)。
注意: 在讀取二進位制檔案時,使用linux系統可以不加“b”,但使用windows一定要“b”,否則會以普通文字形式讀取。
Python讀取二進位制檔案
讀取二進位制檔案並儲存為Long型 (讀取原檔案通過UltraEdit檢視16進位制編碼是“78 56 34 12”)
#以二進位制的方式讀取檔案 #coding: UTF-8 fileData = open('/home/ubuntu/staff_sample.dat','rb') #讀取檔案的前4個位元組 #將讀取的4個位元組轉換為long data_id = struct.unpack("l",fileData.read(4)) print data_id
列印的結果是305419896。
struct.unpack()函式,第一個引數format表示轉換的型別,常用的有:
讀取二進位制檔案並儲存為String型別
原始檔案中字串使用的是TCHAR型別,TCHAR型別的每個字元佔2個位元組,這裡的原始資料是”Staff 頭銜”,使用UE編輯器檢視16進位制編碼是
程式碼:
data_string = fileData.read(128) readString1 = unicode(data_string,"utf-16") print readString1
程式碼中,
第一句表示從二進位制檔案讀取128個位元組;
第二句表示將讀取出來的資料轉換成utf-16格式編碼的字串。
說明:UTF-16是Unicode的其中一個使用方式,其編碼的方法是:
-
如果字元編碼U小於0×10000,也就是十進位制的0到65535之內,則直接使用兩位元組表示
-
如果位元組編碼U大於0×10000,(由於Unicode編碼最大範圍是0x10FFFF),則使用4位元組表示
python 寫入二進位制檔案
1.寫入long型資料
在上面提到python讀取二進位制檔案並轉化為long型,現在逆向將long儲存到檔案中,
#coding: UTF-8 id = 305419896 parsedata_id = struct.pack("L",id) #將long型305419896儲存到二進位制檔案中 #將long型寫入到檔案中 WriteFileData = open('/home/ubuntu/pythonfile.dat','wb') WriteFileData.write(parsedata_id) WriteFileData.close()
2. 將string型別寫入二進位制檔案
text = 'Staff 頭銜' text1 = text.encode("UTF-16") texlength = len(text1) text2 = text1[2:texlength] #將long型和string儲存到檔案中 WriteFileData = open('/home/ubuntu/pythonfile.dat','wb') WriteFileData.write(text2); WriteFileData.close()
解釋:上述程式碼中的第二行將字串採用UTF-16表示後,預設UTF-16檔案的開頭,都會自動放置一個U+FEFF字元作為Byte Order Mark(UTF-16以FF FE代表,UTF-16BE以FE FF代表),其中U+FEFF字元在Unicode中代表的意義是ZERO WIDTH NO-BREAK SPACE,即它表示沒有寬度也沒有斷字的空白。
如果寫入的二進位制檔案需要在C、C++語言中使用,或者需要與C、C++的程式通訊時,則需要將FF FE位元組刪除,也就是需要加入上述程式碼中的第三行和第四行,如果只是用於python語言,可不用理會FF FE這兩個開頭位元組。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2149214/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- flutter-讀寫二進位制檔案到裝置Flutter
- C++ 讀取二進位制檔案到char*C++
- JavaScript 讀寫二進位制資料JavaScript
- 讀入寫出,轉二進位制
- MySQL二進位制檔案(binlog)MySql
- go 自定義二進位制檔案讀寫-儲存倒排索引文件 idGo索引
- 加強版二進位制讀寫器
- 二進位制檔案視覺化(二)視覺化
- Git處理二進位制檔案Git
- 檔案操作(二進位制拷貝)
- 二進位制檔案記憶體對映記憶體
- 二進位制檔案安裝安裝etcd
- 介面返回二進位制檔案的下載。
- 檢視寶塔mysql二進位制檔案 mysqlbinlogMySql
- 6.3建立自己執行的二進位制檔案
- 【Linux】檢視二進位制檔案內容_hexdumpLinux
- golang: 給二進位制檔案增加版本資訊Golang
- Python 讀寫檔案Python
- Python——檔案讀寫Python
- 「Python」:檔案讀寫Python
- 【proto】python根據proto檔案構造message,並換為二進位制Python
- 二進位制與二進位制運算
- Python 十進位制轉換為二進位制 高位補零Python
- 進位制詳解:二進位制、八進位制和十六進位制
- od 轉儲 二進位制檔案常用命令
- 前端怎麼處理二進位制檔案下載前端
- mysqlbinlog 處理二進位制日誌檔案的工具MySql
- 如何將日誌檔案和二進位制檔案快速匯入HDFS?
- 二進位制檔案和符號檔案(PDB)如何校驗是否匹配符號
- 文盤Rust -- 如何把配置檔案打包到二進位制檔案裡Rust
- Python 檔案讀寫(Python IO)Python
- JavaScript 二進位制、八進位制與十六進位制JavaScript
- ABAP 報表中如何以二進位制方式上傳本地檔案試讀版
- python讀寫excel檔案PythonExcel
- python檔案讀寫操作Python
- 二進位制
- (二進位制)
- 十進位制——二 (八、十六 )進位制
- 二進位制,八進位制,十進位制,十六進位制的相互轉換