替换csv文件中某个字段含有换行符的问题

3,388 阅读2分钟

提要

前一段时间需要分析一批csv格式的文件,由于csv文件是以纯文本形式存储表格数据(数字和文本)。一点特殊字符就会导致整个数据错乱,对于特殊字符的过滤和替换在处理这批csv格式的文件是必不可少的。我们就拿最为常见的某个字段含有换行符问题来解决,其他特殊字符问题也是大同小异。

操作

处理前的数据

处理前的数据

#第一行是Header,第二行是某个字段中含有换行符
id,time,url,status,duration
c11532965f81446887ce7a56b1c5903f,2020-09-29T19:40:02.188Z,"http://localhost/es/search/native?statement={""index"":[""weixin1_retention""],""ignore_unavailable"":true}
{""size"":1,""sort"":[{""wx_wci"":{""order"":""desc""}}],""query"": {""bool"": {""must"": {""bool"": {""must"": [{""match_phrase"": {""news_title"": ""上海为抗疫先进颁奖""}}]}}}},""_source"": []}&startTime=1600198801000&endTime=1601408401000",200 OK,471

python脚本

#centos默认安装python2.7,且python简单还有强大的库的支持
> vi filter.py
#python 将目标csv文件每列的数据含有的换行符替换成'',防止数据错行问题(如果报编码问题,去掉这行注释)
import csv
import sys
with open(sys.argv[1], 'r') as srcFile, open(sys.argv[2], 'w') as dstFile:
 fileReader = csv.reader(srcFile)
 fileWriter = csv.writer(dstFile)
 for data in list(fileReader):
  for i,d in enumerate(data):
   if d.find('\r\n') != -1:
    d = d.replace('\r\n', ' ')
   if d.find('\n') != -1:
    d = d.replace('\n', ' ')
   if d.find('\r') != -1:
    d = d.replace('\r', ' ')
   if d.find('\\') != -1:
    d = d.replace('\\', '')
   data[i] = d
  fileWriter.writerow(data)
dstFile.close()
srcFile.close()

执行

#设置权限并执行
> chmod 777 filter.py
> python filter.py 待转.csv 输出.csv

显示处理后的数据

c11532965f81446887ce7a56b1c5903f,2020-09-29T19:40:02.188Z,"http://localhost/es/search/native?statement={""index"":[""weixin1_retention""],""ignore_unavailable"":true} {""size"":1,""sort"":[{""wx_wci"":{""order"":""desc""}}],""query"": {""bool"": {""must"": {""bool"": {""must"": [{""match_phrase"": {""news_title"": ""上海为抗疫先进颁奖""}}]}}}},""_source"": []}&startTime=1600198801000&endTime=1601408401000",200 OK,471