UnicodeDecodeError can't decode byte by writing and reading (with panda) into a file 解决的UnicodeDecodeError无法解码字节
UnicodeDecodeError can't decode byte solved by writing and reading (with panda) into a file
我有一个类似 excel 的数据结构,由我无法解码的字节组成。
这是一个如下所示的列表:
my_object = [b'\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1..., ........, b'\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff']
(注意my_object的最后一行是实际的,这里写得很完整。)
如果我尝试独立解码行,我得到:
my_object[-1].decode()
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 3: invalid start byte
(请注意,我尝试了几种不同的编解码器,包括:'utf8'、'ascii'、'ISO-8859-2'、'gbk'、'latin_1'、...)
但是,如果我尝试先将 my_object 保存到文件,使用:
f = open('test.xls','wb')
[f.write(my_object[i]) for i in range(len(my_object))]
f.close()
然后使用 pandas 打开它,例如:
import pandas as pd
pd.read_excel('test.xls')
我得到了预期的结果:
Time (s) Acceleration x (m/s^2) Acceleration y (m/s^2) \
0 0.000000 0.863679 0.196953
1 0.002500 0.892268 0.206483
2 0.005001 0.844621 0.196953
......
这是一个很好的解决方法,但是,我真的很想避免从磁盘写入和读取磁盘来执行这样的操作。
有人能帮忙吗?
提前致谢。
如果你只是想让pandas读入一个excel文件,而你已经在内存中有原始字节,你可以使用io
包来转换一个字符串或字节放入内存中的可读文件中:
import io
file_bytes = b''.join(my_object)
pd.read_excel(io.BytesIO(file_bytes))
我有一个类似 excel 的数据结构,由我无法解码的字节组成。
这是一个如下所示的列表:
my_object = [b'\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1..., ........, b'\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff']
(注意my_object的最后一行是实际的,这里写得很完整。)
如果我尝试独立解码行,我得到:
my_object[-1].decode()
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 3: invalid start byte
(请注意,我尝试了几种不同的编解码器,包括:'utf8'、'ascii'、'ISO-8859-2'、'gbk'、'latin_1'、...)
但是,如果我尝试先将 my_object 保存到文件,使用:
f = open('test.xls','wb')
[f.write(my_object[i]) for i in range(len(my_object))]
f.close()
然后使用 pandas 打开它,例如:
import pandas as pd
pd.read_excel('test.xls')
我得到了预期的结果:
Time (s) Acceleration x (m/s^2) Acceleration y (m/s^2) \
0 0.000000 0.863679 0.196953
1 0.002500 0.892268 0.206483
2 0.005001 0.844621 0.196953
......
这是一个很好的解决方法,但是,我真的很想避免从磁盘写入和读取磁盘来执行这样的操作。
有人能帮忙吗?
提前致谢。
如果你只是想让pandas读入一个excel文件,而你已经在内存中有原始字节,你可以使用io
包来转换一个字符串或字节放入内存中的可读文件中:
import io
file_bytes = b''.join(my_object)
pd.read_excel(io.BytesIO(file_bytes))