Linux 和 MacOS 上导入 csv 数据的区别
大家好
在 Linux 下使用 UTF8 (BOM) 编码导入带有
pandas.read_csv
的 csv 文件时,第一列名称包含明文形式的 BOM,例如\\xEF\\xBB\\xBFColumnName
。
当我在 MacOS 下做同样的事情时,一切都很漂亮。为什么会出现这种情况?
我使用 python-3.10.12 和 pandas-2.1.2。
这似乎不是 pandas 的问题,而是在 makefile 中使用时 printf 行为的问题:
给定一个 UTF-8(无 BOM)格式的文件 dep.csv,其内容为:
colA;colB:...
和一个包含目标的 Makefile,例如:
target: dep.csv
python3 somescript.py
mv -v $@ $@~
printf '\xEF\xBB\xBF' | cat - $@~ > $@
a
make target
导致包含
的 dep.csv\xEF\xBB\xBFcolA;colB;...
作为纯文本,编码在编辑器(例如 VSCode 或 VIM)中显示为 UTF-8。
但是当在 bash 提示符中直接发出
printf '\xEF\xBB\xBF' | cat - dep.csv~ > dep.csv
时,文件被正确编码为 UTF-8 (BOM):
colA;colB:...
这在 MacOS 上正确完成。
我会将这个问题放在一个新线程中,因为这不是
pandas
或 python
的问题,而是 make
/ printf
的问题。