代码之家  ›  专栏  ›  技术社区  ›  Sagar Howal

如何从复杂的分隔符组合(从txt文件)创建数据帧?

  •  0
  • Sagar Howal  · 技术社区  · 7 年前

    我想从avast网站的 virus-update-history section . 数据格式如下:

    28.03.2018 - 180328-2
    PwrSh:EncCmndTest-A [Trj]
    25.03.2018 - 180325-0
    ELF:Mirai-MR [Trj], MacOS:Miner-A [Trj], Android:SpyAgent-ZW [Trj], Android:SpyAgent-ZX [Trj]
    

    我的首选输出必须是:

    28.03.2018    PwrSh    EncCmndTest-A    [Trj]
    25.03.2018    ELF      Mirai-MR         [Trj]
    25.03.2018    MacOS    Miner-A          [Trj]
    25.03.2018    Android  SpyAgent-ZW      [Trj]
    25.03.2018    Android  SpyAgent-ZX      [Trj]
    

    我正在尝试使用熊猫pd。read\u csv,但我似乎无法找出分隔符的正确组合以及创建此数据帧的确切循环。

    1 回复  |  直到 7 年前
        1
  •  2
  •   rahlf23    7 年前

    这不是最有说服力的解决方案,但这对您的示例有效,假设每个日期条目始终有三条关联的信息。

    import pandas as pd
    import re
    
    raw = ['28.03.2018 - 180328-2',
    'PwrSh:EncCmndTest-A [Trj]',
    '25.03.2018 - 180325-0',
    'ELF:Mirai-MR [Trj], MacOS:Miner-A [Trj], Android:SpyAgent-ZW [Trj], Android:SpyAgent-ZX [Trj]']
    
    out = []
    
    with open('converted.csv', 'w') as myfile:
        for idx, i in enumerate(raw):
            if i[0].isdigit():
                date = i.split(' - ')[0]
            else:
                info = [j for j in re.split(r',| |:', i) if j!='']
                for i in range(int(len(info)/3)):
                    myfile.write(date + ',' + ','.join(info[3*i:3*(i+1)]) + '\n')
    
    df = pd.read_csv('converted.csv', header=None)
    
    print(df)
    

    输出:

                0        1              2      3
    0  28.03.2018    PwrSh  EncCmndTest-A  [Trj]
    1  25.03.2018      ELF       Mirai-MR  [Trj]
    2  25.03.2018    MacOS        Miner-A  [Trj]
    3  25.03.2018  Android    SpyAgent-ZW  [Trj]
    4  25.03.2018  Android    SpyAgent-ZX  [Trj]