Python を使用してバイナリ ファイルを読み書きする方法

WBOY
リリース: 2023-05-03 12:40:06
転載
3085 人が閲覧しました

1. はじめに

Python は、C/C および Python データ形式を変換するために、ファイルのバイナリ データを読み書きするために struct モジュールを使用する必要があります。

2. struct モジュールの概要

struct モジュールで最も一般的に使用される関数は、pack と unpack です。使用方法は次のとおりです:

# #string指定された形式 (fmt) に従ってデータを文字列 (バイト ストリーム) に変換し、文字列を返します。##pack_into(fmt,buffer,offset 、v1、v2...)unpack(fmt,v1,v2……)##pack_from(fmt,buffer,offset)tuple指定された形式 (fmt) に従ってオフセットで始まるバッファを解析し、解析結果を返します#calcsize(fmt) 指定された形式 (fmt) が占めるメモリのバイト数を計算し、アライメントに注意してください 3. struct モジュールのデータ形式 fmt は C/C に対応しますと Python の入力
関数 return explain
pack(fmt,v1,v2…)
None 指定された形式 (fmt) に従ってデータを文字列 (バイト ストリーム) に変換し、オフセットから始まるバイト ストリームをバッファに書き込みます. (buffer は書き込み可能なバッファであり、配列モジュールが使用できます)
tuple 指定された形式 (fmt) に従ってバイト ストリームを解析し、解析結果を返します
#fmt のサイズ
形式

C タイプPython タイプパッドバイト値なしc長さの文字列integerintegerbool##hshortinteger #224##Iunsigned intinteger4llonginteger4L符号なしlong整数4qlong long integer8Qunsignedlonglonginteger 8
import struct

# 打开文件
with open("binary_file.bin", "wb") as f:

    # 写入4个字节的整数(值为12345)
    int_value = 12345
    f.write(struct.pack("<i", int_value))

    # 写入8个字节的双精度浮点数(值为3.14159)
    double_value = 3.14159
    f.write(struct.pack("<d", double_value))

    # 写入一个字节的布尔值(值为True)
    bool_value = True
    f.write(struct.pack("<?", bool_value))

    # 写入一个定长字符串(10个字符,值为"hello")
    string_value = "hello".encode("utf-8")
    f.write(struct.pack("<5s", string_value))

    # 写入一个定长字节数组(20个字节,值为b"\x01\x02\x03...\x14")
    byte_array_value = bytes(range(1, 21))
    f.write(struct.pack("<20s", byte_array_value))

    f.close()

# 打开文件
with open("binary_file.bin", "rb") as f:

    # 读取4个字节,解析成一个整数
    int_value = struct.unpack("<i", f.read(4))[0]
    
    # 读取8个字节,解析成一个双精度浮点数
    double_value = struct.unpack("<d", f.read(8))[0]

    # 读取一个字节,解析成一个布尔值
    bool_value = struct.unpack("<?", f.read(1))[0]

    # 读取一个字符串,解析成一个定长字符串(10个字符)
    string_value = struct.unpack("<5s", f.read(5))[0].decode("utf-8")

    # 读取一个字节数组,解析成一个定长字节数组(20个字节)
    byte_array_value = struct.unpack("<20s", f.read(20))[0]

    # 打印结果
    print(f"int_value: {int_value}")
    print(f"double_value: {double_value}")
    print(f"bool_value: {bool_value}")
    print(f"string_value: {string_value}")
    print(f"byte_array_value: {byte_array_value}")

    f.close()
ログイン後にコピー
を追加すると、次の文字列が Unicode 形式でエンコードされます。ソース コードの保存形式の問題による再使用時の文字化けを防ぐために、通常は中国語の文字列の前に使用されます。
str= u&#39;hello&#39;
ログイン後にコピー
5.2. バックスラッシュ転送メカニズムを削除するには、文字列の前に r
標準サイズ xx

char
1 b signed char
1 B unsigned char
1 ? _Bool
1
H unsigned short integer
i int integer
f float float 4
d double float 8
s char[] string
#p char[] string
P void * integer
##4.例 注意: コード内の < はリトル エンディアンを意味し、> はビッグ エンディアンを意味します5. Python 文字列の前に u、r、b、f を追加する意味 5.1 . 文字列の前に u

を追加します。 (特殊文字: バックスラッシュと対応する文字で、対応する特別な意味を示します。たとえば、最も一般的な「\n」は改行を意味し、「\t」はタブを意味します。)

str= r&#39;hello\n\t\n&#39;
ログイン後にコピー

5.3 . 文字列の前に b

を追加すると、文字列がバイト型であることを示します。

bytes = b&#39;hello&#39;
ログイン後にコピー

Python3 では、bytes と str の間の相互変換メソッドは

str.encode(‘utf-8&#39;)
bytes.decode(‘utf-8&#39;)
ログイン後にコピー

5.4 です。文字列の前に f

を追加し、f で開始して、中かっこがサポートされていることを示します。文字列。Python 式、文字列連結

name = &#39;Lily&#39;
print(f&#39;My name is {name}.&#39;)
ログイン後にコピー

以上がPython を使用してバイナリ ファイルを読み書きする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!