我在这里做错了什么?请提出任何建议。感谢
我正在尝试写出我的数据,但它一直给我一个错误。这是我的代码:
with open(output,'wb') as f:
f.write(b'Apple Data\n7\nApple Number\nE, m\nN, m\nE, m\nB, percent\nF, percent\nFa Code\n')
for i in range(new_ndata):
f.write(str(nn[i])+' '+str(x[i])+' '+str(y[i])+' '+str(n[i])+' '+str(nb[i])+' '+str(nf[i])+' '+str(nfa[i])+'\n')
答案 0 :(得分:0)
这是一个Python 3问题,与Python 3(与Python 2不同)的方式有关,str
类型是Unicode,而不是编码字节。
您的第一个write
调用正确传递了bytes
个实例(引用字符串上的b
前缀会将其删除)。但是,你的第二个调用会传递一个str
实例(从一堆较小的字符串连接起来)。
在将字符串写入二进制文件之前,需要将该字符串编码为字节。或者,以文本模式打开文件,让它为您编码字符串,这需要更改第一个write
以发送字符串,而不是预编码bytes
。)
对于前者,尝试类似:
f.write((str(ndh[i])+' '+str(ncoordx[i])+' '+str(ncoordy[i])+' '+
str(nelev[i])+' '+str(nbit[i])+' '+str(nfines[i])+' '+
str(nfac[i])+'\n').encode("utf-8"))
额外的一点是最后一点,所以我把线条包裹在几个方便的位置(允许在括号内的表达式中)。我在某种程度上随意挑选了"utf-8"
编码。您可能希望使用不同的东西(例如ASCII或许多其他可用编码之一)。并非所有编码都可以编码所有Unicode字符串。 (您也可以通过单个str.format
调用更简洁地表达大字符串连接,但这与编码问题无关。)