亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python實(shí)現(xiàn)文本處理 - 按分隔符將一列里有多個(gè)值的分割成多行

系統(tǒng) 2820 0

最近在處理文件時(shí)需要將一行文本按照一定的分隔符分成多行。如

            
              ABC123,1,2,1!#2,3,4!#5!#6

            
          

ABC123是ID,后面的是屬性,按‘,’分割的第4列,第6列都有不同的屬性,用!#分割,如4!#5!#6,我想要拆成

            
              ABC123,1,2,1,3,4
ABC123,,,2,,5   
ABC123,,,,,6    

            
          

直接上代碼:

            
              
                # -*- coding:utf-8 -*-
              
              
                import
              
               sys

              
                import
              
               time


              
                # 原始文件
              
              
inputfile 
              
                =
              
               sys
              
                .
              
              argv
              
                [
              
              
                1
              
              
                ]
              
              
                #第一層分隔符,如','
              
              
split1 
              
                =
              
               sys
              
                .
              
              argv
              
                [
              
              
                2
              
              
                ]
              
              
                #第二層分隔符,如'!#'
              
              
split2 
              
                =
              
               sys
              
                .
              
              argv
              
                [
              
              
                3
              
              
                ]
              
              
                #輸出文件的分隔符
              
              
Osplit
              
                =
              
               sys
              
                .
              
              argv
              
                [
              
              
                4
              
              
                ]
              
              
                #打開(kāi)文件,f為輸入;o為log;r為輸出
              
              
f 
              
                =
              
              
                open
              
              
                (
              
              inputfile
              
                ,
              
              
                'r+'
              
              
                )
              
              
o 
              
                =
              
              
                open
              
              
                (
              
              
                'log.txt'
              
              
                ,
              
              
                'w+'
              
              
                )
              
              
r 
              
                =
              
              
                open
              
              
                (
              
              inputfile 
              
                +
              
              
                "_output"
              
              
                ,
              
              
                'w+'
              
              
                )
              
              
                #寫下開(kāi)始時(shí)間
              
              
o
              
                .
              
              write
              
                (
              
              
                "["
              
              
                +
              
               time
              
                .
              
              strftime
              
                (
              
              
                "%Y-%m-%d %H:%M:%S"
              
              
                ,
              
               time
              
                .
              
              localtime
              
                (
              
              
                )
              
              
                )
              
              
                +
              
              
                "]Start to Process: "
              
              
                +
              
               inputfile 
              
                +
              
              
                "\n"
              
              
                )
              
              
                all
              
              
                =
              
              
                0
              
              
                #按行處理
              
              
                for
              
              
                (
              
              num
              
                ,
              
              i
              
                )
              
              
                in
              
              
                enumerate
              
              
                (
              
              f
              
                )
              
              
                :
              
              
    ListLine 
              
                =
              
               i
              
                .
              
              strip
              
                (
              
              
                '\n'
              
              
                )
              
              
                .
              
              split
              
                (
              
              split1
              
                )
              
              
                #去除換行符,按照分隔符1拆成一個(gè)數(shù)組
              
              
    ListField 
              
                =
              
              
                [
              
              
                ]
              
              
                for
              
               s1 
              
                in
              
              
                range
              
              
                (
              
              
                len
              
              
                (
              
              ListLine
              
                )
              
              
                )
              
              
                :
              
              
                #按照分隔符2拆成一個(gè)二維數(shù)組
              
              
        ListField
              
                .
              
              append
              
                (
              
              ListLine
              
                [
              
              s1
              
                ]
              
              
                .
              
              split
              
                (
              
              split2
              
                )
              
              
                )
              
              
    FileMax 
              
                =
              
              
                0
              
              
                for
              
               s 
              
                in
              
              
                range
              
              
                (
              
              
                1
              
              
                ,
              
              
                len
              
              
                (
              
              ListField
              
                )
              
              
                )
              
              
                :
              
              
                #獲取某列最多屬性的個(gè)數(shù)
              
              
                if
              
              
                (
              
              FileMax 
              
                <
              
              
                len
              
              
                (
              
              ListField
              
                [
              
              s
              
                ]
              
              
                )
              
              
                )
              
              
                :
              
              
            FileMax 
              
                =
              
              
                len
              
              
                (
              
              ListField
              
                [
              
              s
              
                ]
              
              
                )
              
              
                for
              
               s2 
              
                in
              
              
                range
              
              
                (
              
              FileMax
              
                )
              
              
                :
              
              
                #打印文件
              
              
        r
              
                .
              
              write
              
                (
              
              ListField
              
                [
              
              
                0
              
              
                ]
              
              
                [
              
              
                0
              
              
                ]
              
              
                +
              
               Osplit
              
                )
              
              
                for
              
               s 
              
                in
              
              
                range
              
              
                (
              
              
                1
              
              
                ,
              
              
                len
              
              
                (
              
              ListField
              
                )
              
              
                )
              
              
                :
              
              
                try
              
              
                :
              
              
                if
              
              
                (
              
              s
              
                ==
              
              
                len
              
              
                (
              
              ListField
              
                )
              
              
                -
              
              
                1
              
              
                )
              
              
                :
              
              
                    r
              
                .
              
              write
              
                (
              
              ListField
              
                [
              
              s
              
                ]
              
              
                [
              
              s2
              
                ]
              
              
                )
              
              
                else
              
              
                :
              
              
                    r
              
                .
              
              write
              
                (
              
              ListField
              
                [
              
              s
              
                ]
              
              
                [
              
              s2
              
                ]
              
              
                +
              
               Osplit
              
                )
              
              
                except
              
               IndexError
              
                :
              
              
                if
              
              
                (
              
              s
              
                ==
              
              
                len
              
              
                (
              
              ListField
              
                )
              
              
                -
              
              
                1
              
              
                )
              
              
                :
              
              
                    r
              
                .
              
              write
              
                (
              
              
                ""
              
              
                )
              
              
                else
              
              
                :
              
              
                    r
              
                .
              
              write
              
                (
              
              Osplit
              
                )
              
              
        r
              
                .
              
              write
              
                (
              
              
                "\n"
              
              
                )
              
              
                all
              
              
                +=
              
              FileMax
    
              
                if
              
              
                (
              
              
                (
              
              num
              
                +
              
              
                1
              
              
                )
              
              
                %
              
              
                1000
              
              
                ==
              
              
                0
              
              
                )
              
              
                :
              
              
                #每處理1000行,打印日志,目的是看下處理大文件時(shí)看處理了多少行
              
              
        o
              
                .
              
              write
              
                (
              
              
                "["
              
              
                +
              
               time
              
                .
              
              strftime
              
                (
              
              
                "%Y-%m-%d %H:%M:%S"
              
              
                ,
              
               time
              
                .
              
              localtime
              
                (
              
              
                )
              
              
                )
              
              
                +
              
              
                "]Processed "
              
              
                +
              
              
                str
              
              
                (
              
              num
              
                +
              
              
                1
              
              
                )
              
              
                +
              
              
                " inputfile Line!  Generated "
              
              
                +
              
              
                str
              
              
                (
              
              
                all
              
              
                )
              
              
                +
              
              
                " outputfile Line!"
              
              
                +
              
              
                "\n"
              
              
                )
              
              
o
              
                .
              
              write
              
                (
              
              
                "["
              
              
                +
              
               time
              
                .
              
              strftime
              
                (
              
              
                "%Y-%m-%d %H:%M:%S"
              
              
                ,
              
               time
              
                .
              
              localtime
              
                (
              
              
                )
              
              
                )
              
              
                +
              
              
                "]Finished Processing: "
              
              
                +
              
               inputfile 
              
                +
              
              
                "\n"
              
              
                )
              
              
f
              
                .
              
              close
              
                (
              
              
                )
              
              
o
              
                .
              
              close
              
                (
              
              
                )
              
              
r
              
                .
              
              close
              
                (
              
              
                )
              
            
          

執(zhí)行方法:控制臺(tái)

            
              python ./array.py array.txt 
              
                ","
              
              
                "!#"
              
              
                "|"
              
            
          

輸入文件
Python實(shí)現(xiàn)文本處理 - 按分隔符將一列里有多個(gè)值的分割成多行_第1張圖片

實(shí)測(cè)70萬(wàn)條記錄的文件拆成了1700+萬(wàn)條的文件。
筆記本CPU:Intel? Core? i7-6600U CPU @ 2.60GHz 2.81GHz,用了將近半小時(shí)
服務(wù)器CPU:Intel? Xeon? CPU E5-2686 v4 @ 2.30GHz,用了10分鐘

然后用shell分文件起了多個(gè)腳本(研究了半天python多線程,放棄了)。時(shí)間縮短到6分鐘。

            
              main
              
                (
              
              
                )
              
              
                {
              
              
                if
              
              
                [
              
               $
              
                # -eq 4 ];then
              
              
                echo
              
              
                
                  `
                
                
                  date
                
                 +%Y-%m-%d:%H:%M:%S
                
                  `
                
              
               Start
              
                !
              
              

        threadNum
              
                =
              
              4
        
              
                split
              
               -n l/
              
                ${threadNum}
              
                -d 
              
                $1
              
              
                $1_
              
              
                for
              
              
                
                  ((
                
                i
                
                  =
                
                
                  0
                
                
                  ;
                
                 i
                
                  <
                
                threadNum
                
                  ;
                
                 i
                
                  ++
                
                
                  ))
                
              
              
                do
              
              
        python /data/Operation/iPinYou/data_apend_select/output_appended_attributes_data/array3.py 
              
                ${1}
              
              _0
              
                ${i}
              
              
                $2
              
              
                $3
              
              
                $4
              
              
                &
              
              
                done
              
              
                wait
              
              
                cat
              
              
                ${1}
              
              _*_output 
              
                >
              
              
                ${1}
              
              _output
        
              
                echo
              
              
                
                  `
                
                
                  date
                
                 +%Y-%m-%d:%H:%M:%S
                
                  `
                
              
               Finished
              
                !
              
              
                else
              
              
                echo
              
              
                "Process Failed, Need Arguments[Input File, split 1, split 2, output split]."
              
              
                exit
              
               -1
    
              
                fi
              
              
                }
              
              
main 
              
                $@
              
            
          

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 欧美国产日韩久久久 | 热久久最新地址 | 国产香蕉免费精品视频 | 不卡高清av手机在线观看 | 国产在线精品二区赵丽颖 | 欧美日韩国产亚洲一区二区 | 黄色香蕉视频网站 | 久久久久久一级毛片免费无遮挡 | 国产毛片儿 | 欧美日韩视频在线播放 | 久久精品一区二区三区中文字幕 | 成人精品亚洲 | 97免费 | 鲁丝一区二区三区不属 | 日韩三区 | 亚洲精品国产自在久久出水 | 韩国xxxx色视频在线观看 | 久久七国产精品 | 久草美女| 亚洲精品一区二区三区国产 | 国产福利午夜自产拍视频在线 | 国产午夜精品尤物福利视频 | 国产日本欧美在线观看 | 久久天天躁狠狠躁狠狠躁 | 国产亚洲精品美女一区二区 | 中文字幕综合在线 | 欧美老妇69交 | 久久免费精品高清麻豆 | 伊人激情网 | 免费久久精品视频 | 久久国产精品成人免费 | 国产成在线人视频免费视频 | 日本免费三区 | 国产成年网站v片在线观看 国产成人 免费观看 | 97视频在线免费 | 久久免费高清 | 精品国产一区二区三区香蕉沈先生 | 一级毛片在线免费观看 | 国产精品一区高清在线观看 | 黄色小视频在线免费观看 | 日本伊人色综合网站 |