我的代码:
for i in range(data.num_nodes):
if embed[i]:
# print embed[i]
tmp = np.sum(embed[i], axis=0) / len(embed[i])
file.write(' '.join(map(str.encode("utf-8"), tmp)) + '\n')
else:
file.write('\n')
但是,当我运行代码时,我得到:
file.write(' '.join(map(str.encode("utf-8"), tmp)) + '\n')
`TypeError: 'bytes' object is not callable`
当我将代码更改为此:
for i in range(data.num_nodes):
if embed[i]:
# print embed[i]
tmp = np.sum(embed[i], axis=0) / len(embed[i])
file.write(' '.join(map(str, tmp)) + '\n')
else:
file.write('\n')
我收到此错误:
TypeError: a bytes-like object is required, not 'str'
答案 0 :(得分:1)
要做:
file.write(' '.join(map(str.encode, tmp)) + '\n')
代替:
file.write(' '.join(map(str.encode("utf-8"), tmp)) + '\n')
因为str.encode
需要一个字符串参数,所以这有效,因为默认情况下它已经utf-8
编码
答案 1 :(得分:1)
for s in sheet_name:
if s != 'Sheet1':
wb.remove(wb[s])
期望一个函数对象作为它的第一个参数,并且实际上使用map
调用str.encode("utf-8")
的{{1}}作为第一个参数,并对字符串{{1 }}转换为字节,因此当str.encode
在其第一个参数中调用该函数时,由于实际上是一个字符串,因此它将失败。
您应使用'utf-8'
参数将'utf-8'
预先填充为所需的编码,将map
传递给functools.partial
str.encode
作为函数对象,并将其作为函数对象: / p>
map
但是,由于str.encode
的{{1}}参数的默认值为encoding
,因此您可以通过传递{来使from functools import partial
file.write(' '.join(map(partial(str.encode, encoding='utf-8'), tmp)) + '\n')
使用encoding
的默认值直接从{1}}到str.encode
:
'utf-8'
但是由于您真正想做的是转换整个字符串,因此您将以字节的形式传递给map
,包括str.encode
和str.encode
,它们都是字符串,而不是字节,则应在连接子字符串并使用map
串联后对整个字符串进行编码:
file.write(' '.join(map(str.encode, tmp)) + '\n')
并且由于您的file.write
不是字符串列表,而是' '
对象的列表,因此在加入之前,应先将它们映射到字符串:
'\n'