winsdows下打开csv文件遇到的问题:乱码、字段不分列、长串数字变成科学计数法
在工作过程中,我发现了几个问题:乱码、字段不分列、长串数字变成科学计数法
乱码
唠叨经过
工作中,脚本生成的csv文件,要打开然后另存为xlsx,然后交给同事。
原因是,H同事的电脑用ms(微软)的office打开是乱码,而wps打开则是正常的。
开始我原以为是编码问题,但是确认过编码,不论是utf-8
、utf-16le
、或是gbk
,用wps可以打开,用ms office都是乱码。
后来,才想起来,还有一种可能,那就是bom头,果然加上bom头之后,ms office能正常识别以上几种编码了。
据百度来的消息,微软系的软件似乎都是有这种只认bom头的执着,不加不识别。
解决方法
就是刚才说的加bom文件头。有两种方法:
- 手动:用记事本打开csv,然后保存或另存一下文件,就自动加上bom头了。文件比较大的话用记事本可能打不开,可以用其他文本编辑器处理。如我是用
vim
的:set bomb
来添加。- 脚本:因为该csv文件是用
pandas
库来生成的,所以,修改下脚本添加上编码即可。例:xxx.to_csv('路径/文件名', encoding='utf-8-sig', index=False)
。注:utf-8
是不带bom头编码,utf-8-sig
是带bom头编码,其他编码尚不知道。
字段不分列
唠叨经过
有部分其他软件生成的数据文件,wps打开不能正确分列,全部文本统统识别成一整列了。
后来向同事索要数据源,发现这类文件是用制表符(即Tab
键\t
)分隔的,而不是,
分隔的。
我疑惑了,就我所知虽然一般是逗号做为分隔符,但是也存在着其他符号做为分隔符的,其他常见的如:制表符\t
和;
。而且wps打开csv的时候应该会有弹出对话框选择分隔符,现在也没有。
于是再次百度资料,了解了两个知识点,
一,
csv
没有固定标准的分隔符,,
只是约定俗成的分隔符; 二,有种.tsv
后缀的文件,它用制表符做为分隔符,且不允许数据值内容包含制表符; 三,wps现在默认打开csv文件不弹出对话框,直接自动识别。这个可以在选项里面设置,但是弹出的对话框里没有选择分隔符的的选项不能解决当前的问题。
解决方法
- 制表符分隔的文件,可以把后缀改成
.tsv
后缀,再用wps打开成功识别了。(实测改成.txt
也可以)
长串数字变成科学计数法
唠叨经过
csv表格里面,一些长串的数字(如手机号)等,会被以科学计数法的形式来显示(123456789
会以1.23E8
的格式显现),保存时会导致精度丢失,手机号末尾数字统统变0。
这个时候候其实应当把该字段识别成文本比较妥当,这就需要wps打开时要弹出对话框,要在选项里面更改下设置。
解决办法
wps表格
-选项
-新特性
里面,去掉“打开csv文件时不弹对话框”的勾。- 再次打开csv文件,就会弹出对话框,选择正确的字段类型即可。