Преобразовать список строк Python в байт-код, чтобы записать для записи в файл - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь обучить модель Keras (LipNet) и при начале обучения открывает файл с wb и пытается записать заголовок, содержащийся в списке.Тем не менее, я получаю эту ошибку:

File "c:\users\fahim\documents\lipnet\lipnet\lipreading\callbacks.py", line 77, in on_train_begin
    csvw.writerow(['Epoch', 'Samples', 'Mean CER', 'Mean CER (Norm)', 'Mean WER', 'Mean WER (Norm)', 'Mean BLEU', 'Mean BLEU (Norm)'])
TypeError: a bytes-like object is required, not 'str'

Я посмотрел эту проблему и попробовал много предложенных вещей, таких как b перед строками,

csvw.writerow([b'Epoch', b'Samples', b'Mean CER', b'Mean CER (Norm)', b'Mean WER', b'Mean WER (Norm)', b'Mean BLEU', b'Mean BLEU (Norm)'])

и экспериментировалс превращением списков в байт-код.

>>>bytes([1,2,3])
b'\x01\x02\x03'
>>>bytes(["a", "b"]) 
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    bytes(["a", "b"])
TypeError: 'str' object cannot be interpreted as an integer

Вот полный код , который открывает файл:

(фрагмент)

def on_train_begin(self, logs={}):
        with open(os.path.join(self.output_dir, 'stats.csv'), 'wb') as csvfile: #wb -> w
            csvw = csv.writer(csvfile)
            csvw.writerow([b'Epoch', b'Samples', b'Mean CER', b'Mean CER (Norm)', b'Mean WER', b'Mean WER (Norm)', b'Mean BLEU', b'Mean BLEU (Norm)'])

Кстати, код тожеиспользует рассол, если это помогает.Как csvw записать строку в байт-коде?

1 Ответ

0 голосов
/ 28 января 2019

csv всегда хочет текстовые файлы, а не двоичные файлы, но вы можете попытаться эмулировать это, выполнив это:

with open(os.path.join(self.output_dir, 'stats.csv'), 'w', encoding='utf-8', newline=''):
...