python,从python2发布二进制数据到python3

时间:2016-12-14 02:58:33

标签: python

我需要从二进制文件AmbientTemp.dat向服务器发布一些数据,并且有python2:

import urllib
import urllib2

fp = 'xxx/AmbientTemp.dat'
with open(fp, 'rb') as fo:
    ambient = fo.read(64)
data = urllib.urlencode({
    'action': 'xxx',
    'ambient': ambient,
})
req = urllib2.Request('http://xxx', data=data)
urllib2.urlopen(req)

首先,我可以通过python2保存数据:

class AmbientView(xxx):
    def post(self, *args, **kwargs):
        ambient = self.request.POST.get('ambient', '')
        fp = 'xxx/AmbientTemp.dat'
        with open(fp, 'wb') as fo:
            fo.write(ambient)
        ...

但它在python3.5中是错误的:

...fo.write(ambient)
TypeError: a bytes-like object is required, not 'str'

所以,我编码str数据:

fo.write(ambient.encode(encoding='utf-8'))

AmbientTemp.dat变为78位,我只是read(64)

1 个答案:

答案 0 :(得分:0)

我尝试用latin1对数据进行编码,并获得正确的数据。

fo.write(ambient.encode(encoding='latin1'))