是否有将Unicode文本格式的数据正确转换为python中的csv的方法?

问题描述 投票:1回答:1

我正在访问位于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格式的数据,但是它们都不适合我。我该如何工作?有什么想法可以做到这一点吗?谢谢

python csv python-unicode
1个回答
0
投票

似乎不是utf-8,而是utf-16BOM

如果我删除前两个字节(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'
© www.soinside.com 2019 - 2024. All rights reserved.