欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

csv文件容錯(cuò)處理方法

 更新時(shí)間:2019年07月22日 09:46:38   作者:安家  
這篇文章主要介紹了csv文件容錯(cuò)處理方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

如果數(shù)據(jù)庫(kù)有特殊字符(換行符,轉(zhuǎn)義符),會(huì)導(dǎo)致生成的csv無(wú)法正常導(dǎo)入。

val1,val2,val3
aa,bb,cc
a
a,bb,cc
aa
,bb,cc
aa,
bb,cc
a\a,bb,cc

第一行header和第二行數(shù)據(jù)正常。
第三行第一個(gè)列有換行符,此時(shí)導(dǎo)致第四行看著正常(3列),但是數(shù)據(jù)又是錯(cuò)誤的。
第五行跟第三行類似
第七行實(shí)際是第二個(gè)單元格首字符換行,導(dǎo)致第八行缺失一列。
第九行有轉(zhuǎn)義符

處理成

val1,val2,val3
aa,bb,cc
aa,bb,cc
aa,bb,cc
aa,bb,cc
aa,bb,cc

利用空閑時(shí)間,用python寫(xiě)了個(gè)修補(bǔ)工具,原理是利用,csv是從上往下讀的,如果前一行列數(shù)不夠,一定可以從后一列補(bǔ)上。但是可能存在補(bǔ)完后超過(guò)指定列(比如列內(nèi)包含分隔符,導(dǎo)致數(shù)據(jù)庫(kù)3列,變成4列),所以需要對(duì)其切片,只保留指定列數(shù)。

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=,

總結(jié)

以上所述是小編給大家介紹的csv文件容錯(cuò)處理方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • Hadoop分布式集群的搭建的方法步驟

    Hadoop分布式集群的搭建的方法步驟

    這篇文章主要介紹了Hadoop分布式集群的搭建的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 科學(xué)知識(shí):理解socket

    科學(xué)知識(shí):理解socket

    這篇文章主要介紹了科學(xué)知識(shí):理解socket,本文試圖用簡(jiǎn)潔的語(yǔ)言說(shuō)清楚socket的相關(guān)知識(shí),以便理解,需要的朋友可以參考下
    2015-05-05
  • 詳解window啟動(dòng)webpack打包的三種方法

    詳解window啟動(dòng)webpack打包的三種方法

    這篇文章主要介紹了window啟動(dòng)webpack打包的三種方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 10個(gè)調(diào)試和排錯(cuò)的小建議

    10個(gè)調(diào)試和排錯(cuò)的小建議

    幾乎沒(méi)有哪個(gè)程序員能夠?qū)懗鲆粋€(gè)bug都沒(méi)有的代碼,但是解決方法總是比困難多得多。多實(shí)踐和堅(jiān)毅的決心是成功的關(guān)鍵,這樣才能夠?qū)懗銮鍧嵈a,保證軟件系統(tǒng)的可靠性
    2014-03-03
  • Github創(chuàng)建個(gè)人訪問(wèn)Tokens令牌

    Github創(chuàng)建個(gè)人訪問(wèn)Tokens令牌

    這篇文章介紹了Github創(chuàng)建個(gè)人訪問(wèn)Tokens令牌的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 通過(guò)lms.samples熟悉lms微服務(wù)框架的使用詳解

    通過(guò)lms.samples熟悉lms微服務(wù)框架的使用詳解

    這篇文章主要介紹了通過(guò)lms.samples熟悉lms微服務(wù)框架的使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • eBay 打造基于 Apache Druid 的大數(shù)據(jù)實(shí)時(shí)監(jiān)控系統(tǒng)

    eBay 打造基于 Apache Druid 的大數(shù)據(jù)實(shí)時(shí)監(jiān)控系統(tǒng)

    Apache Druid 是一個(gè)用于大數(shù)據(jù)實(shí)時(shí)查詢和分析的高容錯(cuò)、高性能開(kāi)源分布式時(shí)序數(shù)據(jù)庫(kù)系統(tǒng),旨在快速處理大規(guī)模的數(shù)據(jù),并能夠?qū)崿F(xiàn)快速查詢和分析。這篇文章主要介紹了eBay 如何打造基于 Apache Druid 的大數(shù)據(jù)實(shí)時(shí)監(jiān)控系統(tǒng)?需要的朋友可以參考下
    2019-06-06
  • session的存儲(chǔ)方式和配置方法介紹

    session的存儲(chǔ)方式和配置方法介紹

    Session又稱為會(huì)話狀態(tài),是Web系統(tǒng)中最常用的狀態(tài),用于維護(hù)和當(dāng)前瀏覽器實(shí)例相關(guān)的一些信息。我們控制用戶去權(quán)限中經(jīng)常用到Session來(lái)存儲(chǔ)用戶狀態(tài),這篇文章會(huì)講下Session的存儲(chǔ)方式、在web.config中如何配置Session、Session的生命周期等內(nèi)容
    2012-05-05
  • 輕量級(jí)思維導(dǎo)圖XMind?2023免費(fèi)激活教程

    輕量級(jí)思維導(dǎo)圖XMind?2023免費(fèi)激活教程

    這篇文章主要介紹了輕量級(jí)思維導(dǎo)圖XMind?2023免費(fèi)激活教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • 關(guān)于HTTPS的TSL握手

    關(guān)于HTTPS的TSL握手

    這篇文章主要介紹了關(guān)于HTTPS的TSL握手,HTTP一般基于TCP協(xié)議,而HTTPS就是在這之間加了SSL/TLS協(xié)議,那么在TCP三次握手建立TCP連接后,就需要TLS握手建立SSL/TLS連接,需要的朋友可以參考下
    2023-04-04

最新評(píng)論