python複数のファイルのパッチワークデータを読み込む

14741 ワード

一、需要
11.txt
search a_datetime_x from dpl11294
search c_long from dpl11294
search c_int from dpl11294
search a_long_x from dpl11294
search c_suffix from dpl11294
search a_int from dpl11294
search a_boolean from dpl11294
search a_float from dpl11294
search a_double from dpl11294
search a_boolean_x from dpl11294
search a_string_x from dpl11294
search a_int_x from dpl11294
search c_month_z from dpl11294
search a_double_x from dpl11294
search c_text from dpl11294
search a_long from dpl11294
search c_boolean from dpl11294
search c_city_suffix from dpl11294
search c_month_e from dpl11294
search a_string from dpl11294
search a_float_x from dpl11294
search c_am_pm from dpl11294
search a_datetime from dpl11294
search c_province from dpl11294
search c_date_time from dpl11294
search c_phone_prefix from dpl11294
search a_zero from dpl11294

12.txtにはsqlフィールドの別名が入っています
'a    x'
'  long'
'  '
'a  longx'
'    '
'    '
'      '
'  float  '
'  double  '
'      x'
'     x'
'    x'
'    '
'  doublex'
'    '
'  long'
'    '
'    '
'    '
'     '
'  floatx'
'    '
'      '
'  '
'    '
'   '
'   '

この2つのファイルの内容をマージする必要があります.行は次のように対応します.
search a_datetime_x as 'a    x' from dpl11294

二、考え方
python読み出し11.txtファイルの各行は、fromに従って分割され、分割されたデータはそれぞれ配列に格納される.読み取り12.txtファイルの各行は、配列に格納されます.
この3つの配列の長さが一致しているため、いずれかの配列を遍歴し、それをつなぎ合わせ、1つのファイルに併存します.大功を成し遂げる.
三、pythonのコマンドラインパラメータ
Pythonでもsysのsysを使うことができます.argvは、コマンドラインパラメータを取得します.
  • sys.argvはコマンドラインパラメータのリストです.
  • len(sys.argv)は、コマンドラインパラメータの数です.
  • #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    import sys
    
    print '     :', len(sys.argv), '   。'
    print '    :', str(sys.argv)
    

    以上のコードを実行し、出力結果は次のとおりです.
    $ python test.py arg1 arg2 arg3
         : 4    。
        : ['test.py', 'arg1', 'arg2', 'arg3']
    

    四、実現
    #!/usr/bin/env python
    # -- coding: utf-8 --
    import fileinput
    import sys
    
    #   ,       
    tableArr = []
    #   ,         
    operateArr = []
    #   ,     as  
    asArr = []
    
    
    def readTxt():
        for line in fileinput.input(sys.argv[1]):
            line_data = line.split('from')
            operate = line_data[0]
            table = line_data[1]
            operateArr.append(operate)
            tableArr.append(table)
            pass
    
    
    def readOtherTxt():
        for line in fileinput.input(sys.argv[2]):
            #     ,              
            asArr.append(line.strip('\r
    '
    )) pass def merge(): fo = open(sys.argv[3], "w") for index, item in enumerate(operateArr): fo.write(item + "as " + asArr[index] + " from" + tableArr[index]) fo.close() if __name__ == '__main__': readTxt() readOtherTxt() merge()
    python merge.py 11.txt 12.txt 13.txt
    

    五、展示成果
    13.txt
    search a_datetime_x as 'a    x' from dpl11294
    search c_long as '  long' from dpl11294
    search c_int as '  ' from dpl11294
    search a_long_x as 'a  longx' from dpl11294
    search c_suffix as '    ' from dpl11294
    search a_int as '    ' from dpl11294
    search a_boolean as '      ' from dpl11294
    search a_float as '  float  ' from dpl11294
    search a_double as '  double  ' from dpl11294
    search a_boolean_x as '      x' from dpl11294
    search a_string_x as '     x' from dpl11294
    search a_int_x as '    x' from dpl11294
    search c_month_z as '    ' from dpl11294
    search a_double_x as '  doublex'from dpl11294 from dpl11294
    search c_text as '    ' from dpl11294
    search a_long as '  long' from dpl11294
    search c_boolean as '    ' from dpl11294
    search c_city_suffix as '    ' from dpl11294
    search c_month_e as '    ' from dpl11294
    search a_string as '     ' from dpl11294
    search a_float_x as '  floatx' from dpl11294
    search c_am_pm as '    ' from dpl11294
    search a_datetime as '      ' from dpl11294
    search c_province as '  ' from dpl11294
    search c_date_time as '    ' from dpl11294
    search c_phone_prefix as '   ' from dpl11294
    search a_zero as '   ' from dpl11294