Ceci est un fichier binaire avec une structure très simple à des fins d'apprentissage. Chaque registre a trois nombres: un flottant de 32 bits, un flottant de 64 bits et un autre flottant de 32 bits. Si je vide sur l'écran en hexadécimal, il ressemble à ceci:Comment lire un fichier binaire avec un flottant 32 bits, un flottant 64 bits et un autre flottant 32 bits en Python
0000000: 0800 0000 0000 0000 0000 0000 0800 0000 ................
0000010: 0800 0000 0000 0000 0000 f03f 0800 0000 ...........?....
0000020: 0800 0000 182d 4454 fb21 0940 0800 0000 [email protected]
(...)
Si je copier manuellement la troisième ligne au format binaire, je peux le lire en trois variables:
import struct
data = b'\x08\x00\x00\x00\x18-DT\xfb!\[email protected]\x08\x00\x00\x00'
l1, value, l2 = struct.unpack("<idi", data)
# (8, 3.141592653589793, 8)
qui fonctionne, mais je dois lire le fichier à partir du disque, non seulement la copie manuellement chaque registre en binaire, parce que je dois le faire avec des millions de données. J'ai besoin de quelque chose d'équivalent à la commande suivante utilisée dans les fichiers ASCII:
l1, value, l2 = pylab.loadtxt('./test_file.binary',unpack=True)
Ce qui ne fonctionne pas ici.
est-ce le fichier entier ou y a-t-il plus de données dans le fichier? S'il y en a plus, qu'espérez-vous retrouver dans vos trois variables? –
Il y a plusieurs millions de registres (ou lignes ou peu importe comment vous les nommez) par fichier. – Mephisto