先办事后付费的黑客 有信誉的黑客联系方式

第一行header和第二行数据正常。第三行第一个列有换行符,此时导致第四行看着正常(3列),但是数据又是错误的。第五行跟第三行类似第七行实际是第二个单元格首字符换行,导致第八行缺失一列。第九行有转义符处理成123456val1,val2,val3aa,bb,ccaa,bb,cca

第一行header和第二行数据正常。
第三行第一个列有换行符,此时导致第四行看着正常(3列),但是数据又是错误的。
第五行跟第三行类似
第七行实际是第二个单米格首字符换行,导致第八行缺失一列。
第九行有转义符

处理成

1
2
3
4
5
6
val1,val2,val3
aa,bb,cc
aa,bb,cc
aa,bb,cc
aa,bb,cc
aa,bb,cc

利用空闲时间,用python写了个修补工具,原理是利用,csv是从上往下读的,如果前一行列数不够,一定可以从后一列补上。但是可能存在补完后超过指定列(比如列内包含分隔符,导致数据库3列,变成4列),所以需要对其切片,只保留指定列数。

clean_csv.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# -*- coding: utf-8 -*-
# Author AnJia(anjia0532@gmail.com https://anjia0532.github.io)
import argparse
import sys, os
import io
reload(sys)
sys.setdefaultencoding('utf8')
black_dict={\\:,\:}
def main():
parser = argparse.ArgumentParser()
parser.add_argument('--cols', type=int, dest='cols', action='store', default=-1,help=count of columns,default first line's cells)
parser.add_argument('--src', type=str, dest='src', action='store', default='',
help='path to source csv file')
parser.add_argument('--dest', type=str, dest='dest', action='store', default='',
help='path to dest csv file')
parser.add_argument('--encoding', type=str, dest='encoding', action='store', default='utf-8',
help='file encoding,default utf-8')
parser.add_argument('--chunksize', type=int, dest='chunksize', action='store', default='10000',
help='batch lines to write dest file,default 10000')
parser.add_argument('--delimiter', type=str, dest='delimiter', action='store', default=',',
help='csv delimiter,default ,')
args = parser.parse_args()
cols = args.cols
src = args.src
dest = args.dest
encoding = args.encoding
chunksize = args.chunksize
delimiter = args.delimiter
if not (src and dest) or chunksize <= 0:
print(invaild args!)
sys.exit(-1)
olds=[]
lines=[]
with io.open(src,encoding=encoding) as fp:
for line in fp.readlines():
line = line.strip()
for k,v in black_dict.items():
if k in line:
line=line.replace(k,v)
cells = line.split(delimiter)
if cols == -1:
cols=len(cells)
if(len(cells) < cols or (len(olds)>0 and len(olds) < cols)):
if not olds:
olds = cells
else:


  • 发表于 2021-04-10 13:57
  • 阅读 ( 170 )
  • 分类:互联网

0 条评论

请先 登录 后评论
王三
王三

695 篇文章

你可能感兴趣的文章

相关问题