[転載] Pythonがバイナリファイルを読み書きする

元のアドレス:https : //blog.csdn.net/and_then111/article/details/86744938

1. .binファイルとは

拡張子が.binのファイルはバイナリファイルです。テキストファイルとは異なり、メモ帳、メモ帳++などで開いたバイナリファイルは文字化けします。
これ
メモ帳で.binファイルを開きました
は次のようになります。ただし、.binファイルはWINHEXなどのソフトウェアで開くことができます。バイナリファイルに格納されているすべてのデータは、所定の規則に従って読み出すことによってのみ理解できます。

WINHEXは、バイナリファイルの内容を16進形式に変換し
WINHEXで.binファイルを開きました
ます。テキストファイルと比較したバイナリファイルの利点:記憶域の節約、高速な読み取りと書き込み、および特定の暗号化保護。

バイナリファイルとテキストファイルについては、このブログプログラマーが私をはじかないブログシリーズを参照してください。バイナリファイル

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 + 読み取りと書き込みのためにファイルを開きます。ファイルが既に存在する場合、ファイルポインターはファイルの末尾に置かれます。ファイルを開くと、ファイルは追加モードになります。ファイルが存在しない場合は、読み取りおよび書き込み用に新しいファイルを作成します。
+から バイナリ形式で追加するファイルを開きます。ファイルが既に存在する場合、ファイルポインターはファイルの末尾に置かれます。ファイルが存在しない場合は、読み取りおよび書き込み用に新しいファイルを作成します。

おすすめ

転載: www.cnblogs.com/charleechan/p/12698637.html