如果数据库有特殊字符(换行符,转义符),会导致生成的csv无法正常导入。
val1,val2,val3 aa,bb,cc a a,bb,cc aa ,bb,cc aa, bb,cc a\a,bb,cc
第一行header和第二行数据正常。
第三行第一个列有换行符,此时导致第四行看着正常(3列),但是数据又是错误的。
第五行跟第三行类似
第七行实际是第二个单元格首字符换行,导致第八行缺失一列。
第九行有转义符
处理成
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
# -*- 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: cells[0]=olds[-1]+cells[0] olds.pop() olds.extend(cells) if len(olds) >= cols: cells=olds olds=[] if not olds: lines.append(delimiter.join(cells[0:cols])+"\n") if len(lines) % chunksize == 0: write_to_file(dest=dest,lines=lines) lines=[] write_to_file(dest=dest,lines=lines) def write_to_file(dest,lines=[],encoding='utf-8'): p = os.path.split(dest)[0] if not os.path.exists(p): os.makedirs(p) with io.open(file=dest,mode="a+",encoding=encoding) as fp: fp.writelines(lines) if __name__ == '__main__': main()
使用方式
python clean_csv.py --src=src.csv --dest=dest.csv --chunksize=50000 --cols --encoding=utf-8 --delimiter=,
总结
以上所述是小编给大家介绍的csv文件容错处理方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
暂无评论...
更新日志
2024年11月22日
2024年11月22日
- 证声音乐图书馆《毕业季·青春爵士》[320K/MP3][49.17MB]
- 张国荣《劲歌集》欧盟压碟[原抓WAV+CUE]
- 黄安《明明知道相思苦》[WAV+CUE]
- 李俊广VS许岚岚《秋蝉》[低速原抓WAV+CUE]
- 证声音乐图书馆《毕业季·青春爵士》[FLAC/分轨][265.35MB]
- 证声音乐图书馆《爵士嘉年华 Big Band Swing》[320K/MP3][62.44MB]
- 证声音乐图书馆《爵士嘉年华 Big Band Swing》[FLAC/分轨][239.3MB]
- 中国民歌宝典《民歌精粹经典珍藏》12CD[WAV]
- 阿姆斯特丹小交响乐团演奏《室内交响曲》SACD-WAV
- Parijat-BuddhaGarden《佛陀花园》[WAV+CUE]
- 证声音乐图书馆《巴莎诺瓦 惬意咖啡馆》[320K/MP3][220.56MB]
- 证声音乐图书馆《巴莎诺瓦 惬意咖啡馆》[FLAC/分轨][220.56MB]
- 群星《狂潮》夜店中文爆嗨重低音 黑胶碟2CD[低速原抓WAV+CUE]
- TraditionalMusicEnsembleofTheBNMA-BuddhistMusicoftheMingDynasty(JVC-Japan)[FLAC]
- [中国唱片]中央乐团交响乐队《绝烧HIFI典范》[WAV+CUE]