【学术】数据处理中,如何正确地用WPS查看csv文件

【作者结论】

-- > 把文本列中的所有英文逗号替换为中文逗号

-- > 更改文本格式为utf-8 BOM编码

--> 用WPS打开,成功(亲测可行)


1. 如果是码农,建议直接用notepad++查看,简单便捷,省去无数麻烦。

2. 如果是给其他人员看,那么需要借助excel或者WPS:

(1)Excel的缺点:需要先把csv文件从utf-8转码为ANSI,打开后中文才不会乱码,但是这会造成文本本身特殊符号、表情的乱码。因此,不推荐。

(2)WPS的优点:能够直接打开utf8格式的csv文件,无需转码。

二者共同的缺点都是,默认英文逗号为分隔符。这意味着,如果你的文本某一列内部含有英文逗号,用这两个工具打开后会发现一列文本分两列显示,数据极其不整齐。

如何解决:

方案一:管它三七二十一,直接把所有英文逗号统一换成中文逗号,哪怕本文是英文文本。【最推荐】

简单版本如下:

text = dic.get('text ', "").replace(",", ",")

注意英文逗号和中文逗号的区别(其实最终在csv中都显示为英文逗号,但是WPS却偏偏能识别出中文逗号,不按套路出牌的WPS,根本读不懂!!!!)

(插入一个私货,供作者自己使用的复杂版本如下)

def filter_text(text):
    text = text.replace("\/", "/")
    re_tag = re.compile(']*>')  # HTML标签
    new_text = re.sub(re_tag, '', text)
    new_text = re.sub(",,,+", ",,,", new_text)  # 合并逗号
    new_text = re.sub(" +", " ", new_text)  # 合并空格
    new_text = re.sub("--+", "--", new_text)  # 合并-
    new_text = re.sub("———+", "———", new_text)  # 合并-
    return new_text

description = filter_text(d.get('description', "")).replace("\r","\t").replace("\n",".").replace(",", ",")

方案二:给文本加引号,让WPS能识别出这是个统一的文本,如

user_id = dic.get('user_id ', "")
text = dic.get('text ', "").replace(", ", ",").replace("\"", "\'")

注意:

(1)需要把所有的"英文逗号+空格" 替换成 ”英文逗号“,否则WPS仍然认为这个文本内部分列了.别问为什么,我也不知道为什么WPS要做如此微妙的设定。。

(2)需要把文本内部自带的引号,统一替换为单引号。否则WPS仍然会以引号出现的地方作为本列的结尾。那么后续就麻烦了,打开后你面对的仍然是乱七八糟的格式。

即便我做了如此尝试,结果仍然匪夷所思:

WPS中,有的逗号被认为是文本内部,有的逗号被认为是分列符号。

但是,csv源文件中的数据十分规整,一模一样的逗号,没任何毛病。

让人想摔杯子。

最后:

如果WPS打开utf8格式的文件存在乱码,不影响分列的话,可以忍忍。

如果影响分列和整齐性,那么试一下utf8 BOM编码,虽然仍然显示有乱码,但是分列无影响了(说明此乱码非彼乱码)。

如何根本消除乱码呢? 无解。

回到开头,直接用notepad查看csv吧,用什么WPS呢。。

 

你可能感兴趣的:(科研经验)