提问人:Martin 提问时间:7/7/2023 更新时间:7/8/2023 访问量:61
UnicodeEncodeError 与 in2csv
UnicodeEncodeError with in2csv
问:
你能帮我做点什么吗?
我有非常大的 .xlsx 文件(范围从 200MB 到 1.4GB),我需要将其转换为 .csv 格式。
我想在2csv中使用csvkit函数:
(venv) C:\Users\Martin\csvkit_tutorial>in2csv first.xlsx > second.csv
但是,当我运行它时,我收到以下错误:
C:\Users\Martin\csvkit_tutorial\venv\Lib\site-packages\agate\utils.py:274: UnnamedColumnWarning: Column 0 has no name. Using "a".
UnicodeEncodeError: 'charmap' codec can't encode characters in position 137-146: character maps to <undefined>
我不在乎第一列是否被命名为“a”。主要问题是第二个错误 UnicodeEncodeError。
创建第二个 .csv 文件,但仅在发生错误之前,即数千行中只有 133 行转换为 .csv。
我在网上看过,有人建议将编码转换为例如 utf-8 标准会有所帮助,但我不知道如何在 csvkit 中做到这一点。
谢谢你的帮助。
顶级域名: 我尝试使用 csvkit 函数 in2csv 将 .xlsx 文件转换为 .csv。 它无法正常工作,引用了 UnicodeEncodeError,并且只转换了文件的一小部分。
答:
有 2 个答案很快就会浮现在脑海中——不过,它们在文档中很容易被遗漏。
in2csv 有一个编码参数:-e ENCODING, --encoding ENCODING
它也有 - 我不确定有什么区别,但对于您可能想要的 unicode 错误--encoding-xls ENCODING_XLS
-e utf8
第二种可能性更普遍(但我不推荐) - Tips & Tricks 解释道:
Python 标准输出编码错误
如果,在运行这样的命令时,您会收到如下错误:
csvlook dummy.csv | less
“ASCII”编解码器无法对位置 2 中的字符“\u0105”进行编码:序号不在范围内(128)
最简单的选项是使用 PYTHONIOENCODING 环境变量设置 Python 用于标准流的编码:
env PYTHONIOENCODING=utf8 csvlook dummy.csv | less
我不建议你普遍设置它,这里提到它是为了完整。
csvkit
始终使用默认编码创建输出 CSVKfile 。它有输入编码(和)的选项,但它们不用于输出。--encoding
--encoding-xls
我可以使用一个包含 2 个单元格的小文件重现该错误,其中包含您在评论中提供的中文字符:亚得科技工程有限公司和帝斯曼食品专业有限公司。
将 PYTHONIOENCODING 环境变量设置为 utf8 就足以解决以下问题:
Windows 语法:
set PYTHONIOENCODING=utf8 in2csv first.xlsx > second.csv
Linux(或其他类 Unix):
PYTHONIOENCODING=utf8 in2csv first.xlsx > second.csv
评论
--encoding