winsdows下打开csv文件遇到的问题:乱码、字段不分列、长串数字变成科学计数法

近段时间来,~~打杂的万金油~~我被指派接手某离职同事的python脚本,配合其他部门同事的工作。

在工作过程中,我发现了几个问题:乱码、字段不分列、长串数字变成科学计数法

乱码

唠叨经过

工作中,脚本生成的csv文件,要打开然后另存为xlsx,然后交给同事。 原因是,H同事的电脑用ms(微软)的office打开是乱码,而wps打开则是正常的。 开始我原以为是编码问题,但是确认过编码,不论是utf-8utf-16le、或是gbk,用wps可以打开,用ms office都是乱码。 后来,才想起来,还有一种可能,那就是bom头,果然加上bom头之后,ms office能正常识别以上几种编码了。 据百度来的消息,微软系的软件似乎都是有这种只认bom头的执着,不加不识别。

解决方法

就是刚才说的加bom文件头。有两种方法:

  1. 手动:用记事本打开csv,然后保存或另存一下文件,就自动加上bom头了。文件比较大的话用记事本可能打不开,可以用其他文本编辑器处理。如我是用vim:set bomb来添加。
  2. 脚本:因为该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文件不弹出对话框,直接自动识别。这个可以在选项里面设置,但是弹出的对话框里没有选择分隔符的的选项不能解决当前的问题。

解决方法

  1. 制表符分隔的文件,可以把后缀改成.tsv后缀,再用wps打开成功识别了。(实测改成.txt也可以)

长串数字变成科学计数法

唠叨经过

csv表格里面,一些长串的数字(如手机号)等,会被以科学计数法的形式来显示(123456789会以1.23E8的格式显现),保存时会导致精度丢失,手机号末尾数字统统变0。 这个时候候其实应当把该字段识别成文本比较妥当,这就需要wps打开时要弹出对话框,要在选项里面更改下设置。

解决办法

  1. wps表格-选项-新特性里面,去掉“打开csv文件时不弹对话框”的勾。2022021501.PNG
  2. 再次打开csv文件,就会弹出对话框,选择正确的字段类型即可。2022021502.PNG