csvcut 通过管道忽略 -e 命令行选项

csvcut ignores -e command line option thru pipe

提问人:Ed Beighe 提问时间:5/6/2023 最后编辑:Ed Beighe 更新时间:5/8/2023 访问量:38

问:

编辑:问题/问题/解决方案解释如下: https://github.com/wireservice/csvkit/issues/898 修复涉及设置环境变量 PYTHONIOENCODING


今天我了解到我需要使用 -e ENCODING 选项来处理我的输入数据(它是带有某些字符的 ascii> 0x7f。“extended ascii”) 转换为 csvcut,例如

csvcut -v -e latin-1 -c AGE,NAME input.txt 

但是,按预期工作

cat input.txt | csvcut -v -e latin-1 -c AGE,NAME

不,失败并显示错误

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd1 in position 22: invalid continuation byte

换句话说,csvcut 似乎忽略了第二种情况下的 -e 选项。

文件 input.txt 是

NAME,AGE
Jimmie, 10
Ñandor, 357

Ñ 是十六进制0xd1

为什么通过管道的结果会有所不同?有解决方法吗?

管道 CSVKitT

评论

0赞 skomisa 5/7/2023
在问题开始时,您说“解决方法涉及设置环境变量 PYTHONIOENCODING”,但这实际上不是解决方案,而不仅仅是一种解决方法吗?还是在通过管道输入时设置 PYTHONIOENCODING 根本不起作用?
0赞 Ed Beighe 5/8/2023
是的,也许我的用词不当。
0赞 skomisa 5/8/2023
好的,但需要明确的是:[1] 设置 PYTHONIOENCODING 是否解决了问题,还是忽略了它的值?[2] 如果它确实解决了问题,那么您的问题是否只是为了找到一个不涉及设置 PYTHONIOENCODING 的解决方案?
0赞 Ed Beighe 5/11/2023
[1] 是的,据我所知,它确实解决了问题,而且 [2] 好吧,我最初问这个问题时并不了解 PYTHONIOENCODING 是一回事,甚至 csvkit 使用 Python。按照我的思维方式,最终用户(在这种情况下是我)不需要知道这些细节
0赞 skomisa 5/11/2023
理解并同意。但就其价值而言,不幸的是,设置 PYTHONIOENCODING 是我能找到的唯一解决方案。

答: 暂无答案