#以二进制的方式读取文件 #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表示转换的类型,常用的有:
data_string = fileData.read(128) readString1 = unicode(data_string,"utf-16") print readString1
第一句表示从二进制文件读取128个字节;
第二句表示将读取出来的数据转换成utf-16格式编码的字符串。
说明:UTF-16是Unicode的其中一个使用方式,其编码的方法是:
在上面提到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这两个开头字节。
行万里路,读万卷书,阅无数人。 吃货一枚,爱吃湘菜,粤菜与杭帮菜,尝遍天下美食。 摄影爱好者,游遍名川大山,江河胡海,赏遍人间春色。 爱看电影,尤其是国产大片,好莱坞大片。英文名:Dickson Jin, 网名:风一样的BOY。精通SAP供应链咨询。2017年开始研习人工智能。
注册时间:
2014-08-27
4365724
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员