sna*_*815 3 python pandas python-unicode
我使用Windows命令行程序(samtools.exe)生成了一个巨大的(6G)txt文件:
.\samtools.exe mpileup -O bamfile.bam > txtfile.tsv
生成的文件实际上是由制表符分隔的表.当我尝试使用pandas.read_table打开它时,它给了我:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
当我试图打印文件的第一行时,它是这样的:
ÿþAL645882 473 N 1 ^!c I 1
除了第一个字符外,一切正常.如果我读它使用'rb',确实第一个字符是0xff.
我真的希望这个表被读作一个pandas DataFrame,文件很大,反正我还能让python忽略这个0xff字节吗?或者只是删除文件中的字节?
提前致谢!
这看起来像是错误解释的UTF-16 BOM表头:
In [25]: with open("tmp.csv", "wb") as fp:
...: fp.write("a,b\n1,2".encode("utf-16"))
...:
In [26]: open("tmp.csv", "rb").read().decode("latin-1")
Out[26]: 'ÿþa\x00,\x00b\x00\n\x001\x00,\x002\x00'
In [27]: print(open("tmp.csv", "rb").read().decode("latin-1"))
ÿþa,b
1,2
Run Code Online (Sandbox Code Playgroud)
所以你可以尝试将其解释为UTF-16:
In [29]: pd.read_csv("tmp.csv")
[...]
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
In [30]: pd.read_csv("tmp.csv", encoding='utf-16')
Out[30]:
a b
0 1 2
Run Code Online (Sandbox Code Playgroud)
(还有其他的黑客,你可以做,如果它真的是则只会导致问题,比如打开一个文件指针和阅读两个字节的头两个字节,但我怀疑在上面的例子中有该文件在AREN空字节很明显,所以最好使用正确的编码.)