2016-05-26 1 views
2

Я недавно перешел на Python 3. В моем коде я имел NumPy сохранить как текст командыКак переключить текстовый и двоичный режим записи в Python 3?

f_handle = open('results.log','a') 
f_handle.write('Some text') 
numpy.savetxt(f_handle, X, delimiter=',', fmt='%.4f') 

В Python 3 это приводит к ошибке для Numpy команды, флаг должен быть «аб», то есть , запись в двоичном формате. Теперь я смешиваю несколько заявлений писать после друг друга так, чтобы вызвать команду Numpy я должен был бы сделать что-то вроде этого,

f_handle = open('results.log','a') 
f_handle.write('Some text...') 
f_handle.close() 

f_handle = open('results.log','ab') 
numpy.savetxt(f_handle, X, delimiter=',', fmt='%.4f') 
f_handle.close() 

f_handle = open('results.log','a') 
f_handle.write('Some more text...') 

Это кажется очень неэффективный способ делать вещи, особенно если вы пишете много вещей. Итак, как мне это сделать?

ответ

2

Вы можете просто закодировать текст перед записью:

with open('results.log','ab') as f_handle: 
    f_handle.write('Some text...'.encode('utf-8')) 
1

Вы можете создать бинарную строку с b флагом.

In [101]: with open('test.txt','wb') as f: 
    .....:  f.write(b'some binary string text\n') 

Я использую, что при создании тестовых строк из genfromtxt (который также настаивает на работе с байтовых файлов

In [103]: txt=b'''1,2,3 
    .....: 4,5,6'''.splitlines() 

In [104]: np.genfromtxt(txt,delimiter=',') 
Out[104]: 
array([[ 1., 2., 3.], 
     [ 4., 5., 6.]]) 

genfromtxt часто использует asbytes:.

In [109]: np.lib.npyio.asbytes?? 
Type:  function 
String form: <function asbytes at 0xb5a74194> 
File:  /usr/lib/python3/dist-packages/numpy/compat/py3k.py 
Definition: np.lib.npyio.asbytes(s) 
Source: 
    def asbytes(s): 
     if isinstance(s, bytes): 
      return s 
     return str(s).encode('latin1') 

np.savetxt также использует его напишите комментарии и каждую строку вашего массива:

fh.write(asbytes(comments + header + newline)) 
fh.write(asbytes(format % tuple(row2) + newline)) 
Смежные вопросы