【数据处理】为什么CSV文件用WPS打开总是比原始文件少若干行

处理一个csv文件,每次用文本编辑器打开,是某行。换成WPS打开总少几百行。

人工定位了一下异常的数据:

2020/07/03 00:43:24,SikorskyFlights,"Linsk Minyk“ Sikorsky
2020/07/03 00:43:26,wendy_marchese,Wendy Marchese
2020/07/03 00:43:26,Smartkr13564931,smart_Krish
2020/07/03 00:43:26,ChiTsz1,ChiTsz1,
2020/07/03 00:43:26,TBeansprout,TONYA {K}🌸

原来,"Linsk Minyk“ 用了英文引号开头,中文引号结尾。WPS遇到引号开头,默认为文本,但是迟迟找不到结束的引号,因此“吸收”了后面的所有行!

看下图,开头的英文引号不会出现在单元格内,被默认为文本的开始符。

解决方案:

(最差选择)把所有引号替换为  单引号、中文引号、反斜杠+引号,都可以解决这个问题。但是会破坏原有成分。

2020/07/03 00:43:24,SikorskyFlights,\"Linsk Minyk“ Sikorsky
2020/07/03 00:43:26,wendy_marchese,Wendy Marchese
2020/07/03 00:43:26,Smartkr13564931,smart_Krish
2020/07/03 00:43:26,ChiTsz1,ChiTsz1,
2020/07/03 00:43:26,TBeansprout,TONYA {K}🌸

(最优选择)把异常的文本列,前后都加上引号。

def filter_text(text):
    text = text.strip().replace("\\", "/").replace("\r", " ").replace("\n", ".")
    if text.startswith("\""):
        text = "\"" + text + "\""
    re_tag = re.compile('</?\w+[^>]*>')  # 去掉HTML标签
    new_text = re.sub(re_tag, '', text)
    new_text = re.sub(" +", " ", new_text)  # 合并空格
    new_text = re.sub("\t", " ", new_text)  # 去掉tab
    return new_text

如果把所有文本列都加上引号,文本内部的逗号就不会被误认为是列分隔符。

这样做有个问题:用python代码读取CSV时,就不能简单使用  line.strip().split(",") 进行列分隔了,而是要进行文件解析。

所以,我在生成csv文件的时候用”\t“做分隔符。然后把所有英文逗号批量替换为句号或分号。然后再把\t批量替换为逗号。

这样极其省事!

但是如果是正规的商业数据挖掘,还是老老实实解析文件吧。

 

 

©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值