Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python3 v.s.Python2中解析二进制数据_Python_Python 3.x_Python 2.x - Fatal编程技术网

在Python3 v.s.Python2中解析二进制数据

在Python3 v.s.Python2中解析二进制数据,python,python-3.x,python-2.x,Python,Python 3.x,Python 2.x,我有一段代码,可以读取原始二进制数据并将数据输出到csv文件中。该代码在Python2中运行良好,但在Python3中不起作用。在Python3中,将创建一个新的输出文件,但不会向其中写入任何数据。我试图修改它,但我就是不知道如何使它在Python 3x中工作 请帮助我使这段代码在Python3中工作 我认为问题是由Python2和Python3之间对“str”和“bytes”的不同处理引起的。我阅读了“将Python2代码移植到Python3”(portingPython2 Code to P

我有一段代码,可以读取原始二进制数据并将数据输出到csv文件中。该代码在Python2中运行良好,但在Python3中不起作用。在Python3中,将创建一个新的输出文件,但不会向其中写入任何数据。我试图修改它,但我就是不知道如何使它在Python 3x中工作

请帮助我使这段代码在Python3中工作

我认为问题是由Python2和Python3之间对“str”和“bytes”的不同处理引起的。我阅读了“将Python2代码移植到Python3”(portingPython2 Code to Python3)的文档,尝试了许多我甚至不知道是否有意义的事情,当然,它们都不起作用。。。请参阅下面的代码

导入gzip
导入结构
导入csv
def read_binary_文件(大小、bin_数据_运算符):
read=bin\u data\u运算符。read(大小);
返回读取;
def添加订单编号mpid(消息):
msg_type='A';
温度=结构解包('>4s6sQcI8cI',msg);
新消息=结构包('>s4s2s6sQsI8sI',消息类型,温度[0],'\x00\x00',温度[1],温度[2],温度[3],温度[4],'.join(列表(温度[5:13]),温度[13]);
val=结构解包('>sHHQQsI8sI',新消息);
val=列表(val);
val[8]=浮动(val[8]);
val[8]=val[8]/10000;
返回val;
def添加带有mpid(消息)的订单:
msg_type='F';
温度=结构拆包('>4s6sQcI8cI4c',msg);
新消息=结构包('>s4s2s6sQsI8sI4s',消息类型,温度[0],'\x00\x00',温度[1],温度[2],温度[3],温度[4],''.join(列表(温度[5:13]),温度[13],''.join(列表(温度[14:18]);
val=结构解包('>sHHQQsI8sI4s',新消息);
val=列表(val);
val[8]=浮动(val[8]);
val[8]=val[8]/10000;
返回val;
def订单执行消息(消息):
msg_type='E';
温度=结构解包('>4s6sQIQ',msg);
新消息=结构包('>s4s2s6sQIQ',消息类型,温度[0],'\x00\x00',温度[1],温度[2],温度[3],温度[4]);
val=struct.unpack('>sHHQQIQ',new_msg);
val=列表(val);
返回val;
bin_data=gzip.open('input_binary_data.txt.gz','rb');
out_file=open('output_file.csv','wb');
writer=csv.writer(输出文件);
消息类型=bin\u data.read(1);
消息类型为:
如果消息类型=“A”:
消息=读取二进制文件(35,二进制数据);
已解析数据=添加订单号mpid(消息);
writer.writerow(解析的_数据)
elif消息类型==“F”:
消息=读取二进制文件(39,二进制数据);
已解析数据=添加带有mpid(消息)的订单;
writer.writerow(解析的_数据)
elif消息类型==“E”:
消息=读取二进制文件(30,二进制数据);
解析数据=订单执行消息(消息);
writer.writerow(解析的_数据)
消息类型=bin\u data.read(1);
bin_data.close();
out_file.close();

您的问题是什么?我需要在Python 3中实现这一点,但我不知道如何…您遇到了哪些具体问题?请花一点时间阅读一些技巧,以改进您的问题,从而获得所需的帮助。在Python 3中,将创建一个新的输出文件,但不会向其中写入任何数据。您有很多代码,其中有些内容不起作用。尝试隔离不起作用的部分,例如,通过比较py2(起作用的部分)和py3(不起作用的部分)中代码不同部分的行为。