2010-03-23 6 views
3

Je voudrais être en mesure d'ouvrir un fichier binaire, et faire une liste (type de tableau) avec tous les caractères, comme: "\ x21 \ x23 \ x22 \ x21 \ x22 \ x31 "à [" \ x21 "," \ x23 "," \ x22 "," \ x21 "," \ x22 "," \ x31 "] Quelle serait la meilleure solution pour le convertir?convertir un fichier binaire dans une liste (python)

Merci!

Répondre

1

Supposons que myfile.txt a « abcdef \ n » en elle ...

>>> fh = open('myfile.txt', 'rb') 
>>> list(fh.read()) 
['a', 'b', 'c', 'd', 'e', 'f', '\n'] 
2

Vous pouvez lire les données binaires dans une chaîne comme vous le feriez avec des données texte, assurez-vous d'ouvrir le fichier en mode binaire (le drapeau b dans l'appel à open()):

with open('file.bin', 'rb') as f: 
    data = f.read() 

data contient maintenant les caractères du fichier sous forme de chaîne, comme "\x21\x23\x22\x21\x22\x31".

4

Vous devez comprendre que "\ x21" et "!" sont deux façons de représenter la même chose

si "\x21\x23\x22\x21\x22\x31" est le même que '!#"!"1'

>>> "\x21\x23\x22\x21\x22\x31" == '!#"!"1' 
True 

>>> infile = open('infile.txt', 'rb') 
>>> list(infile.read()) 
['!', '#', '"', '!', '"', '1'] 
>>> ['!', '#', '"', '!', '"', '1'] == ["\x21","\x23","\x22","\x21","\x22","\x31"] 
True 

Donc, vous voyez qu'ils sont la même chose, mais python essaie toujours de choisir le plus facile à utiliser amicalement pour afficher les caractères (! plus que d'utiliser une liste)

1

pour faire « une sorte de tableau » de caractères, d'une manière extrêmement efficace est d'utiliser la bibliothèque standard de Python array Module:

res = array.array('c') 
with open('binaryfile', 'rb') as f: 
    while True: 
     try: res.fromfile(f, 1024 * 1024) 
     except EOFError: break 

Cela ne lit pas plus d'un mégaoctet à la fois (c'est le 1024 * 1024), mais continue jusqu'à ce que le fichier est tout fait - vous pouvez modifier ce comportement que vous préférez, bien sûr.