Pandas读取问题,0xff在0位

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字节吗?或者只是删除文件中的字节?

提前致谢!

DSM*_*DSM 5

这看起来像是错误解释的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空字节很明显,所以最好使用正确的编码.)