提问人:Jan Jansen 提问时间:11/3/2023 最后编辑:Jan Jansen 更新时间:11/6/2023 访问量:51
Linux 上的 Pandas 导入 UTF 8 (BOM) csv,并在列名称中将 BOM 标题作为明文
Pandas on Linux importing UTF 8 (BOM) csv with BOM header as cleartext in column names
问:
在 Linux 和 MacOS 上导入 csv 数据的区别
大家好,
在 Linux 下使用 UTF8 (BOM) 编码导入 csv 文件时,第一列名称包含明文形式的 BOM,例如 .pandas.read_csv
\\xEF\\xBB\\xBFColumnName
当我在 MacOS 下做同样的事情时,一切都很美好。为什么会这样?
我使用 python-3.10.12 和 pandas-2.1.2。
答:
0赞
Jan Jansen
11/6/2023
#1
似乎这不是 pandas 的问题,而是在 makefile 中使用时的 printf 行为的问题:
给定一个 UTF-8 (no-BOM) 中的文件目标.csv,其中包含以下内容:
colA;colB:...
以及一个包含如下目标的 Makefile:
target.csv:
python3 somescript.py
mv -v $@ $@~
printf '\xEF\xBB\xBF' | cat - $@~ > $@
一个make target.csv
导致目标.csv 包含
\xEF\xBB\xBFcolA;colB;...
作为纯文本,编码在编辑器(例如 VSCode 或 VIM)中以 UTF-8 显示。
但是当直接在 bash 提示符中发出时,文件被正确编码为 UTF-8 (BOM):printf '\xEF\xBB\xBF' | cat - target.csv~ > target.csv
colA;colB:...
这在 MacOS 上是正确的。
我会把这个问题放在一个新线程中,因为它不是 or 的问题,而是 / 的问题。pandas
python
make
printf
评论
0赞
Ulrich Eckhardt
11/6/2023
这说明了为什么你应该首先提取一个最小的可重现示例。该行为中声称的操作系统依赖性早就得到了澄清。
评论
encoding='utf8-sig'
utf8