【学术】数据处理中,如何正确地用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('</?\w+[^>]*>')  # 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呢。。

 

发布了392 篇原创文章 · 获赞 487 · 访问量 239万+
展开阅读全文

在使用python读取用WPS打开的csv文件时读取到空白行的问题

10-09

在学习《python数据分析基础》2.6节:读取多个CSV文件时发现一个问题,这一节给了一个 脚本用于计算某路径下所有csv文件的行,列数. ``` import csv import sys import os import glob input_path=sys.argv[1] file_counter=0 for input_file in glob.glob(os.path.join(input_path,'sales_*')): row_counter = 1 with open(input_file,'r',newline='') as csv_in_file: filereader = csv.reader(csv_in_file) header=next(filereader,None) for row in filereader: row_counter+=1 print('{0!s}:\t{1:d} rows \t{2:d} columns'.format(\ os.path.basename(input_file),row_counter,len(header))) file_counter+=1 print('Number of files:{0:d}'.format(file_counter)) ``` 原本书中给的数据文件是这样的: ![数据是书上给的,7行5列的数据,csv文件是我自己手动录入的..](https://img-ask.csdn.net/upload/201810/09/1539091373_148586.png) 数据是书上给的,7行5列的数据,csv文件是我自己手动录入的. 由于WPS表格单元格过小,在录入数据后拉伸各行列宽,高: ![有部分空白行被我批量拉伸宽高时选中](https://img-ask.csdn.net/upload/201810/09/1539091495_455630.png) 有部分空白行被我批量拉伸宽高时选中 然后执行脚本,发现被批量拉伸宽高时选中的空白行也被计算入文件的行数: ![图片说明](https://img-ask.csdn.net/upload/201810/09/1539091643_668383.png) 将这些被拉伸宽高的空白行删去后再次执行脚本,结果正常: ![图片说明](https://img-ask.csdn.net/upload/201810/09/1539091724_809323.png) 综上,发现在WPS里打开CSV文件后如果在拉伸各行列的高宽时,选中了没有内容的空白行, 这些空白行会在文件读取对象中被迭代,导致空白行被计算,请问这是为什么? 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览