Запись Строк в файлы в Python

Я получаю следующую ошибку при попытке записать строку в файл в Python:

Traceback (most recent call last):
  File "export_off.py", line 264, in execute
    save_off(self.properties.path, context)
  File "export_off.py", line 244, in save_off
    primary.write(file)
  File "export_off.py", line 181, in write
    variable.write(file)
  File "export_off.py", line 118, in write
    file.write(self.value)
TypeError: must be bytes or buffer, not str

У меня в основном есть строковый класс, который содержит строку:

class _off_str(object):
    __slots__ = 'value'
    def __init__(self, val=""):
        self.value=val

    def get_size(self):
        return SZ_SHORT

    def write(self,file):
        file.write(self.value)

    def __str__(self):
        return str(self.value)

Кроме того, я называю тот класс как это (где переменная является массивом объектов _off_str:

def write(self, file):
    for variable in self.variables:
        variable.write(file)

Я понятия не имею, что продолжается. Я видел, что другие программы Python пишут строки в файлы, итак, почему не может этот?

Большое спасибо за Вашу справку.

Править: Похоже, что я должен был заявить, как я открыл файл, вот то, как:

file = open(filename, 'wb')
primary.write(file)
file.close()
12
задан Mike Graham 22 March 2010 в 21:51
поделиться

5 ответов

Я подозреваю, что вы используете Python 3 и открыли файл в двоичном режиме, который будет принимать только байты или буферы для записи внутрь.

Есть ли шанс увидеть код, открывающий файл для записи?


редактировать: Похоже, это действительно виноват.

8
ответ дан 2 December 2019 в 04:43
поделиться

Какую версию Python вы используете? В Python 3.x строка содержит текст Unicode без определенной кодировки. Чтобы записать его в поток байтов (файл), вы должны преобразовать его в байтовую кодировку, такую ​​как UTF-8, UTF-16 и т. Д. К счастью, это легко сделать с помощью метода encode () :

Python 3.1.1 (...)
>>> s = 'This is a Unicode string'
>>> print(s.encode('utf-8'))

Другой пример, запись UTF-16 в файл:

>>> f = open('output.txt', 'wb')
>>> f.write(s.encode('utf-16'))

Наконец, вы можете использовать «автоматический» текстовый режим Python 3, который будет автоматически преобразовать вашу строчку в указанную вами кодировку:

>>> f = open('output.txt', 'wt', encoding='utf-8')
>>> f.write(s)
20
ответ дан 2 December 2019 в 04:43
поделиться

Я не вижу, чтобы вы сначала открывали файл:

file_handler = open(path)
file_handler.write(string)
file_handler.close()
3
ответ дан 2 December 2019 в 04:43
поделиться

Как вы открыли файл?

Судя по сообщению об ошибке, я предполагаю :

f = open("file", "wb") # b for binary mode

Если вы хотите использовать строки, вы должны использовать :

f = open("file", "w") 

Если вы используете "b", файлы ожидают двоичные данные, а вы пишете self.value, что является строкой.

Кстати, не используйте file" в качестве имени переменной, так как это скрывает file встроенного объекта Python.

0
ответ дан 2 December 2019 в 04:43
поделиться

Я вижу в вашем комментарии вы упомянули, что сделали

file = open('xxx.xxx' ,'wb')

Это означает, что вы открываете файл для записи в двоичном формате (поэтому просто опустите флаг b).

1
ответ дан 2 December 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: