我有一个元组列表,我想将其保存到文件中。我通常使用.encode('utf-8')
来解决这个错误,但是因为我确实有一个带有整数的元组,所以这似乎不起作用。
我的数据如下:
lis=[[(0, u'good', 19, u'quality', 1),
(1, u'smells', 13, u'product', 0),
(1, u'better', 14, u'packaging', 1),
[(3, u'error', 6, u'vendor', 0)]]
如果我运行我的代码
with open("./Results.csv","w") as f:
for k in range(0, len(lis)):
for line in lis[k]:
strs=str(k)+" "+" ".join(str(x)) for x in line)
f.write(strs+"\n")
我收到了ascii代码错误。如果我在代码中使用str(x.encode('utf-8'))
,则会产生不同的错误,即:
AttributeError: 'int' object has no attribute 'encode'
如果你能帮助我解决这个问题,那就太好了。
最佳亚历
答案 0 :(得分:1)
你的呼叫顺序倒退了;你想要
str(x).encode('utf-8')
...虽然str()
可能碰到同样的错误,如果你传递的东西可能是或不是Unicode,编码str
无论如何都不一定定义明确;你应该使用
unicode(x).encode('utf-8')
答案 1 :(得分:0)
str(x).encode('utf-8')
而非str(x.encode('utf-8'))for k in lis
代替for k in range(0, len(lis))
for line in k
代替for line in lis[k]
" ".join(str(x)) for x in line)
中的语法错误很可能应该是 - > " ".join(str(x) for x in line)
祝你好运!
答案 2 :(得分:0)
假设您使用Python2,您可以执行以下操作:
对获得的unicode字符串进行编码
...
strs=str(k)+" "+" ".join(unicode(x).encode('utf-8') for x in line)
...
答案 3 :(得分:0)
您收到&
错误,因为您正在对其中包含非ASCII字符的Unicode字符串调用'ascii' codec can't encode character
。
在Python 2.x中,str()
将尝试使用ASCII编解码器将Unicode编码为字节。因此,永远不要在Unicodes上使用str()
。相反,您可以使用str()
和编解码器进行尝试。您接下来会遇到进一步的问题,因为.encode()
并不总是字符串 - 有时候它是x
不支持编码/解码。您已经拥有Unicode字符串,您也应该将int
转换为Unicode字符串。现有的Unicode字符串,将很高兴。
实际上,如果您发现自己在代码中间使用了int
或.encode()
,那么您就知道自己做错了什么。改为使用 Unicode三明治 - 在代码的边缘进行解码和编码。对于您,请使用.decode()
模块open()
对您进行io
编码,自动编码。
您可以使用其他一些Python功能来使代码可读,例如open
和str.format
格式。总而言之,它使代码更具可读性和灵活性:
+=
看,不要摆弄import io
lis=[
[
(0, u'good', 19, u'quality', 1),
(1, u'smells', 13, u'product', 0),
(1, u'better€', 14, u'packaging', 1)
],
[
(3, u'error', 6, u'vendor', 0)]
]
with io.open("results.csv","w", encoding='utf-8') as f:
counter = 0
for k in lis:
for line in k:
concat = u" ".join(unicode(x) for x in line)
outline = u"{counter} {concat}\n".format(counter=counter, concat=concat)
f.write(outline)
counter += 1
!
输出:
.encode()