尝试将字符串写入pythion中的文件时出现以下错误:
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()
答案 0 :(得分:18)
您使用的是哪个版本的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的“自动”文本模式,该模式会自动将您的str
转换为您指定的编码:
>>> f = open('output.txt', 'wt', encoding='utf-8')
>>> f.write(s)
答案 1 :(得分:8)
我怀疑您使用的是Python 3,并以二进制模式打开文件,该模式只接受要写入的字节或缓冲区。
我们有机会看到打开文件进行写作的代码吗?
编辑:看起来确实是罪魁祸首。
答案 2 :(得分:2)
我没有看到你先打开文件:
file_handler = open(path)
file_handler.write(string)
file_handler.close()
答案 3 :(得分:1)
我在你的评论中看到你提到你做了
file = open('xxx.xxx' ,'wb')
这意味着你打开文件以二进制文件写入(所以只留下b
标志)。
答案 4 :(得分:0)
你是怎么打开文件的?
根据错误消息,我猜:
f = open("file", "wb") # b for binary mode
如果要使用字符串,则必须使用:
f = open("file", "w")
如果您使用“b”,文件将需要二进制数据,而您正在编写self.value
这是一个字符串。
顺便说一句,不要使用file
“作为变量名,因为它隐藏了file
内置的Python对象。