元のアドレス:https : //blog.csdn.net/and_then111/article/details/86744938
1. .binファイルとは
拡張子が.binのファイルはバイナリファイルです。テキストファイルとは異なり、メモ帳、メモ帳++などで開いたバイナリファイルは文字化けします。
これ
は次のようになります。ただし、.binファイルはWINHEXなどのソフトウェアで開くことができます。バイナリファイルに格納されているすべてのデータは、所定の規則に従って読み出すことによってのみ理解できます。
WINHEXは、バイナリファイルの内容を16進形式に変換し
ます。テキストファイルと比較したバイナリファイルの利点:記憶域の節約、高速な読み取りと書き込み、および特定の暗号化保護。
バイナリファイルとテキストファイルについては、このブログプログラマーが私をはじかないブログシリーズを参照してください。バイナリファイル
2.バイナリファイルの読み取りと書き込み
2.1バイナリファイルの読み取り
バイナリファイル「x.bin」の内容を読み込み、1バイトずつ出力します。
(1)ファイルパスを入力filepath
します。ここでは、.binファイルとコードファイルが同じフォルダーに配置されているため、絶対パスは書き込まれません。
(2)open(filepath, 'rb')
:読み取り形式でファイルを開き、使用に注意してくださいRB バイナリファイルを読み取る。
(3)閉じることを忘れないでください: binfile.close()
import struct
import os
if __name__ == '__main__':
filepath='x.bin'
binfile = open(filepath, 'rb') #打开二进制文件
size = os.path.getsize(filepath) #获得文件大小
for i in range(size):
data = binfile.read(1) #每次输出一个字节
print(data)
binfile.close()
実行して結果を出力します。
10進数の結果を表示する場合は、Pythonでstruct.unpack()メソッドを使用できます。:
struct.unpack('B', data)
ここB
でのパラメーターの意味は、PythonでC構造体データのunsigned char型を整数に変換することです。
ここで取得されるnumはタプル型であるため、num[0]
番号を削除するために使用します。
for i in range(size):
data = binfile.read(1)
num = struct.unpack('B', data)
print(num[0])
出力は次のとおりです。
2.2バイナリファイルの書き込み
(1)123という数値をバイナリファイルに書き込む場合、最初にint型をbytes型に変換する必要があります。
data.to_bytes(1, 'big')
:パラメーター ' 1
':1バイトバイトに変換されます;パラメーター'big
':バイトオーダー。
変数
a
のタイプを表示します。使用できますtype()
a=123
print('a:',type(a))
b=a.to_bytes(1,'big')
print('b:',type(b))
出力:
(2)open(filepath, 'ab+')
:バイナリファイルを書き込みモードで開きます。
作成時の注意:使用+から 追加の書き込みを完了するには、次を使用します。 wb上書きを完了します。
(3)閉じるbinfile.close()
data=123
content= data.to_bytes(1, 'big')
filepath='123.bin'
binfile = open(filepath, 'ab+') #追加写入
binfile.write(content)
print('content',content)
binfile.close()
2.3オープンファイルモード
open()
2番目のパラメーターである、ファイルを開くさまざまなモードをリストします。b付きのパラメータは、操作バイナリファイル、およびbなしの操作テキストファイルを意味します。Pythonファイルの読み書き(open()、close()、open()をfとして)
からの抜粋
模様 | 説明文 |
---|---|
r | ファイルを読み取り専用で開きます。ファイルポインタはファイルの先頭に置かれます。これがデフォルトのモードです。 |
RB | 読み取り専用のバイナリ形式でファイルを開きます。ファイルポインタはファイルの先頭に置かれます。これがデフォルトのモードです。 |
r + | 読み取りと書き込みのためにファイルを開きます。ファイルポインタはファイルの先頭に置かれます。 |
rb + | 読み取りと書き込みのためにバイナリ形式でファイルを開きます。ファイルポインタはファイルの先頭に置かれます。 |
w | 書き込み専用でファイルを開きます。ファイルがすでに存在する場合は、上書きされます。ファイルが存在しない場合は、新しいファイルを作成します。 |
wb | 書き込み専用のバイナリ形式でファイルを開きます。ファイルがすでに存在する場合は、上書きされます。ファイルが存在しない場合は、新しいファイルを作成します。 |
w + | 読み取りと書き込みのためにファイルを開きます。ファイルがすでに存在する場合は、上書きされます。ファイルが存在しない場合は、新しいファイルを作成します。 |
wb + | 読み取りと書き込みのためにバイナリ形式でファイルを開きます。ファイルがすでに存在する場合は、上書きされます。ファイルが存在しない場合は、新しいファイルを作成します。 |
a | 追加するファイルを開きます。ファイルが既に存在する場合、ファイルポインターはファイルの末尾に置かれます。つまり、新しいコンテンツは既存のコンテンツの後に書き込まれます。ファイルが存在しない場合は、書き込み用に新しいファイルを作成します。 |
から | バイナリ形式で追加するファイルを開きます。ファイルが既に存在する場合、ファイルポインターはファイルの末尾に置かれます。つまり、新しいコンテンツは既存のコンテンツの後に書き込まれます。ファイルが存在しない場合は、書き込み用に新しいファイルを作成します。 |
a + | 読み取りと書き込みのためにファイルを開きます。ファイルが既に存在する場合、ファイルポインターはファイルの末尾に置かれます。ファイルを開くと、ファイルは追加モードになります。ファイルが存在しない場合は、読み取りおよび書き込み用に新しいファイルを作成します。 |
+から | バイナリ形式で追加するファイルを開きます。ファイルが既に存在する場合、ファイルポインターはファイルの末尾に置かれます。ファイルが存在しない場合は、読み取りおよび書き込み用に新しいファイルを作成します。 |