Dan*_*ein 7 python encoding numpy utf-16le
我正在尝试将文本文件读入python,但它似乎使用了一些非常奇怪的编码.我试着平常:
file = open('data.txt','r')
lines = file.readlines()
for line in lines[0:1]:
print line,
print line.split()
Run Code Online (Sandbox Code Playgroud)
输出:
0.0200197 1.97691e-005
['0\x00.\x000\x002\x000\x000\x001\x009\x007\x00', '\x001\x00.\x009\x007\x006\x009\x001\x00e\x00-\x000\x000\x005\x00']
Run Code Online (Sandbox Code Playgroud)
打印线条工作正常,但在我尝试拆分线以便我可以将其转换为浮动之后,它看起来很疯狂.当然,当我尝试将这些字符串转换为浮点数时,会产生错误.有关如何将这些转换为数字的任何想法?
如果你想尝试加载它,我把示例数据文件放在这里:https: //dl.dropboxusercontent.com/u/3816350/Posts/data.txt
我想简单地使用numpy.loadtxt或numpy.genfromtxt,但他们也不想处理这个疯狂的文件.
aba*_*ert 16
我愿意打赌这是一个UTF-16-LE文件,无论你的默认编码是什么,你都在阅读它.
在UTF-16中,每个字符占用两个字节.*如果您的字符都是ASCII,这意味着UTF-16编码看起来像ASCII编码,每个字符后面加一个'\ x00'.
要解决此问题,只需解码数据:
print line.decode('utf-16-le').split()
Run Code Online (Sandbox Code Playgroud)
或者使用io或codecs模块在文件级别执行相同的操作:
file = io.open('data.txt','r', encoding='utf-16-le')
Run Code Online (Sandbox Code Playgroud)
*这有点过于简单化:每个BMP字符占用两个字节; 每个非BMP字符都变成代理对,两个代理中的每一个都占用两个字节.但你可能并不关心这些细节.