我正在访问位于ftp服务器上的数据集。下载数据后,我使用pandas
读取为csv
,但出现编码错误。该文件的扩展名为csv
,但是在用MS excell打开文件后,数据为Unicode Text
格式。我想对以Unicode文本格式存储的那些数据集进行转换。我怎样才能做到这一点?有什么想法可以完成吗?
我的尝试:
from ftplib import FTP
import os
def mydef():
defaultIP=''
username='cat'
password='cat'
ftp = FTP(defaultIP,user=username, passwd=password)
ftp.dir()
filenames=ftp.nlst()
for filename in files:
local_filename = os.path.join('C:\\Users\\me', filename)
file = open(local_filename, 'wb')
ftp.retrbinary('RETR '+ filename, file.write)
file.close()
ftp.quit()
然后我尝试这样做以获得正确的编码:
mydef.encode('utf-8').splitlines()
但是这个对我不起作用。我使用了this solution
以上代码的输出:
这里是上面代码的输出片段:
b'\ xff \ xfeF \ x00L \ x00O \ x00W \ x00 \ t \ x00C \ x00T \ x00Y \ x00_ \ x00R \ x00P \ x00T \ x00 \ t \ x00R \ x00E \ x00P \ x00O \ x00R \ x00T \ x00E \ x00R \ x00 \ t \ x00C \ x00T \ x00Y \ x00_ \ x00P \ x00T \ x00N \ x00 \ t \ x00P \ x00A \ x00R \ x00T \ x00N \ x00E \ x00R \ x00 \ t \ x00C \ x00O \ x00M \ x00M \ x00O \ x00D \ x00I \ x00T \ x00Y \ x00 \ t \ x00D \ x00E \ x00S \ x00C \ x00R \ x00I \ x00P \ x00T \ x00I \ x00O \ x00N \ x00 \ t'
预期输出
此数据集的预期输出应为常规csv
数据,例如常见贸易数据,但编码对我而言不起作用。
我使用了不同的编码来正确转换csv
格式的数据,但是它们都不适合我。我该如何工作?有什么想法可以做到这一点吗?谢谢
似乎不是utf-8
,而是utf-16
和BOM
如果我删除前两个字节(BOM
-Bytes Order Mark
),最后一个字节在末尾,因为它不完整(每个字符都需要两个字节),请使用decode('utf-16-le')
b'F\x00L\x00O\x00W\x00\t\x00C\x00T\x00Y\x00_\x00R\x00P\x00T\x00\t\x00R\x00E\x00P\x00O\x00R\x00T\x00E\x00R\x00\t\x00C\x00T\x00Y\x00_\x00P\x00T\x00N\x00\t\x00P\x00A\x00R\x00T\x00N\x00E\x00R\x00\t\x00C\x00O\x00M\x00M\x00O\x00D\x00I\x00T\x00Y\x00\t\x00D\x00E\x00S\x00C\x00R\x00I\x00P\x00T\x00I\x00O\x00N\x00'.decode('utf-16-le')
然后我得到
'FLOW\tCTY_RPT\tREPORTER\tCTY_PTN\tPARTNER\tCOMMODITY\tDESCRIPTION'