mode="rb"
でデータファイルを開き、モジュールstruct
を使用してデータを解釈することができます。
はのバイナリファイル(エラーチェックなしのCコード)を作成してみましょう:
#include <stdio.h>
int main()
{
FILE *fp = fopen("data.bin", "wb");
int data[] = {
2, 3, 5,
553, 827, 189, 680, 587,
817, 969, 186, 701, 964,
260, 527, 408, 236, 429,
768, 447, 826, 520, 937,
492, 180, 599, 785, 296,
876, 670, 145, 283, 206
};
fwrite(data, sizeof(data), 1, fp);
fclose(fp);
}
$ ls data.bin
-rw-rw-r-- 1 user user 132 Apr 27 18:45 data.bin
$ hd data.bin
00000000 02 00 00 00 03 00 00 00 05 00 00 00 29 02 00 00 |............)...|
00000010 3b 03 00 00 bd 00 00 00 a8 02 00 00 4b 02 00 00 |;...........K...|
00000020 31 03 00 00 c9 03 00 00 ba 00 00 00 bd 02 00 00 |1...............|
00000030 c4 03 00 00 04 01 00 00 0f 02 00 00 98 01 00 00 |................|
00000040 ec 00 00 00 ad 01 00 00 00 03 00 00 bf 01 00 00 |................|
00000050 3a 03 00 00 08 02 00 00 a9 03 00 00 ec 01 00 00 |:...............|
00000060 b4 00 00 00 57 02 00 00 11 03 00 00 28 01 00 00 |....W.......(...|
00000070 6c 03 00 00 9e 02 00 00 91 00 00 00 1b 01 00 00 |l...............|
00000080 ce 00 00 00 |....|
00000084
今、私たちは、ファイルを読み取り、ジェネレータ関数で解釈置きます。残りは簡単です:
$ python3.5
Python 3.5.0+ (default, Oct 11 2015, 09:05:38)
[GCC 5.2.1 20151010] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import struct
>>> def read_ints(filename):
... with open(filename, "rb") as f:
... byte = f.read(4)
... while byte:
... yield struct.unpack("i", byte)[0]
... byte = f.read(4)
...
>>> for i in read_ints("data.bin"):
... print(i)
...
2
3
5
553
827
189
680
587
817
969
186
701
964
260
527
408
236
429
768
447
826
520
937
492
180
599
785
296
876
670
145
283
206
>>>
新しいファイルがあなたの助けを
感謝:-)演習として残しておき書きます。私は、ループを使用してPythonでデータサイズをカットする方法を理解していません。あなたはそれを手伝ってもらえますか? – Max