2017-06-02 3 views
-1

Je dois écrire du texte, puis des données binaires dans un fichier. Par exemple, je voudrais écrire le fichier avec le contenu:Comment écrire des données binaires dans un fichier texte en Python?

BESTFORMAT 
NUMLINES 42 
FIELDS FOO BAR SPAM 
DATATYPES INT32 FLOAT64 FLOAT64 
FILETYPE BINARY 
???d?'Ӈ T???'Ѥ??X??\?? 
?? R??&??X??\??????? 
??zR??X??\???????? 
... 

Cependant, en Python (3.5) vous ne pouvez pas ouvrir un fichier d'une manière que vous pouvez écrire des données ASCII, puis les données binaires.


J'ai essayé:

  • Conversion mes données binaires au texte (pas bon, car il génère b'5 42.7 0.8'

  • Encoding mes données texte en binaire et ouvrir le fichier en tant que binaire (pas bon, comme alors j'ai un fichier binaire, ce qui n'est pas ce que je veux)

+0

Possible copie de [Python comment écrire dans un fichier binaire?] (Https://stackoverflow.com/questions/18367007/python-how-to-write-to-a-binary-file) –

Répondre

0

D'accord, il se avère que j'ai eu la réponse tout le long, je ne le savais tout simplement pas.

Il vous suffit d'ouvrir le fichier en tant que mode texte:

with open("file.best", "w") as fl: 
    fl.write("BESTFORMAT\n\ 
NUMLINES 42\n\ 
FIELDS FOO BAR SPAM\n\ 
DATATYPES INT32 FLOAT64 FLOAT64\n\ 
FILETYPE BINARY\n\ 
") 

Ouvrez ensuite le fichier dans append, mode binaire:

with open("file.best", "ab") as fl: 
    fl.write(nparr.tostring()) 

Ce qui me rattrapa était mon éditeur de texte a été d'ouvrir le fichier dans mode hexadécimal, donc j'ai juste un tas de codes hexadécimaux. Lorsque j'ai ouvert le fichier en codage UTF-8, j'ai vu l'en-tête ASCII et les données binaires en dessous.

+2

vous pourriez avoir utilisé 'fl.write (b "BESTFORMAT \ n \ numLines 42 \ n \ CHAMPS FOO BAR sPAM \ n \ DataTypes INT32 float64 float64 \ n \ FILETYPE BINARY \ n \ ")' pour que vous puissiez avoir utilisé le mode binaire du fichier –