我正在访问 ftp 服务器上的数据集。下载数据后,我使用 pandas
将其读取为 csv
但出现编码错误。该文件具有 csv
文件扩展名,但在我使用 MS Excel 打开该文件后,数据采用 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
格式数据,但它们都不适合我。我怎样才能做到这一点?有什么想法可以完成这件事吗?谢谢
最佳答案
编辑:我必须更改它 - 现在我删除了开头的 2 个字节 (BOM
) 和末尾的一个字节,因为数据不完整(每个字符都需要2字节)
看起来不是utf-8
而是带有BOM
的utf-16
如果我删除前两个字节(BOM
- 字节顺序标记
)和末尾的最后一个字节,因为它不完整(每个字符需要两个字节)并使用 解码('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'
<小时/>
编辑:同时我还发现 Python - Decode UTF-16 file with BOM
关于python - 有什么方法可以在 python 中将 unicode 文本格式数据正确转换为 csv 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59741722/