【问题标题】:Python : Extract one string from 100 lines of textPython:从 100 行文本中提取一个字符串
【发布时间】:2016-09-28 00:08:30
【问题描述】:
  1. 我需要从 100 行日志数据中提取一个特定的字符串。我 尝试拆分,然后尝试获取所需的字符串但不能 成功。任何建议/帮助表示赞赏。谢谢!

    在下面的日志中,我想提取突出显示的部分,即 是 zqn.2005- 04.com.sanblaze:virtualun.init74-2.initiator-00000000-0000(在第57行)

    1         Out[19]:
    2         {'portstatus': {'errors': {'busy_errors': '0',
    3         'checkcondition_errors': '0',
    4         'compare_errors': '0',
    5         'ioc_errors': '0',
    6         'notready_errors': '0',
    7         'read_errors': '0',
    8         'read_retries': '0',
    9         'scsi_errors': '0',
    10         'test_errors': '0',
    11         'timeout_errors': '0',
    12         'write_errors': '0',
    13         'write_retries': '0'},
    14         'net_counters': {'RxBytes': '148476788547060',
    15         'RxCompressed': '0',
    16         'RxDrop': '96188',
    17         'RxErrs': '0',
    18         'RxFIFO': '0',
    19         'RxFrame': '0',
    20         'RxMulticast': '259513',
    21         'RxPFCPause': '0',
    22         'RxPackets': '77165581759',
    23         'RxStandardPause': '0',
    24         'TxBytes': '20440169002909',
    25         'TxCompressed': '0',
    26         'TxDrop': '0',
    27         'TxErrs': '0',
    28         'TxFIFO': '0',
    29         'TxFrame': '0',
    30         'TxMulticast': '0',
    31         'TxPFCPause': '0',
    32         'TxPackets': '55075507366',
    33         'TxStandardPause': '5349727',
    34         'net_avgriops': '0',
    35         'net_avgrrate': '0.00',
    36         'net_avgtiops': '0',
    37         'net_avgtrate': '0.00',
    38         'net_riops': '0',
    39         'net_rrate': '0.00',
    40         'net_tiops': '0',
    41         'net_trate': '0.00'},
    42         'perfdata': {'avg_oiocnt': '0',
    43         'avgiops': '0',
    44         'avgriops': '0',
    45         'avgrrate': '0.00',
    46         'avgtrate': '0.00',
    47         'avgwiops': '0',
    48         'avgwrate': '0.00',
    49         'iops': '0',
    50         'max_oiocnt': '509',
    51         'oiocnt': '0',
    52         'riops': '0',
    53         'rrate': '0.00',
    54         'trate': '0.00',
    55         'wiops': '0',
    56         'wrate': '0.00'},
    57         'status': {'initiator0_iqn': 'zqn.2005- 04.com.sanblaze:virtualun.init74-2.initiator-00000000-0000',
    58         'initiator10_iqn': 'zqn.2005-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0010',
    59         'initiator11_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0011',
    60         'initiator12_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0012',
    61         'initiator13_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0013',
    62         'initiator14_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0014',
    63         'initiator15_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0015',
    64         'initiator16_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0016',
    65         'initiator17_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0017',
    66         'initiator18_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0018',
    67         'initiator19_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0019',
    68         'initiator1_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0001',
    69         'initiator20_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0020',
    70         'initiator21_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0021',
    71         'initiator22_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0022',
    72         'initiator23_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0023',
    73         'initiator24_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0024',
    74         'initiator25_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0025',
    75         'initiator26_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0026',
    76         'initiator27_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0027',
    77         'initiator28_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0028',
    78         'initiator29_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0029',
    79         'initiator2_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0002',
    80         'initiator30_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0030',
    81         'initiator31_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0031',
    82         'initiator32_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0032',
    83         'initiator33_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0033',
    84         'initiator34_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0034',
    85         'initiator35_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0035',
    86         'initiator36_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0036',
    87         'initiator37_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0037',
    88         'initiator38_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0038',
    89         'initiator39_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0039',
    90         'initiator3_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0003',
    91         'initiator40_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0040',
    92         'initiator41_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0041',
    93         'initiator42_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0042',
    94         'initiator43_iqn': 'iqn.2003-04.com.sanblaze:virtualun.init74-2.initiator-00000000-0043',
    95         'mode': 'Init',
    96         'numinitiators': '50',
    97         'numtargets': '0',
    98         'port': '0',
    99         'portwwnn': '90:e2:ba:82:92:1c',
    100         'portwwpn': '90:e2:ba:82:92:1c',
    101         'speed': '10G',
    102         'state': 'Online',
    103         'topo': 'iSCSI'},
    104         'sympn': '-',
    

【问题讨论】:

  • 如果字典被称为lookup 那么:lookup['status']['initiator0_iqn']
  • 另外,使用的语言重要吗?解决方案必须是 Python,还是 Python 的输出以及任何语言都可以获取输出?
  • @Addison 我只需要获取该字符串,我想将其复制到其他变量。它需要在 Python 中。
  • 该输出是 json 还是类似 json 的对象?如果是这样,您可能可以 json.loads() 将其转换为 python 字典。否则,既然您已经声明您不想导入任何内容,请阅读每一行,在 : ... 左侧成为键,右侧成为值... 或遍历每一行并使用 if 语句if "line".find(substring) > -1: 那么这一定是我的字符串......或者因为你似乎知道你正在寻找的部分使用正则表达式。

标签: python regex logging


【解决方案1】:

看起来字符串是字典格式(如果我错了,请纠正我),所以您可以尝试将其转换为一个。那么你就不需要正则表达式了。

import ast
your_dict = ast.literal_eval(your_string)

那么你想要的是:

your_dict['status']['initiator0_iqn']

【讨论】:

  • 谢谢,但有没有办法不导入任何库?
  • ast 应该在您的系统上随 python 一起提供。但如果您不想使用它,您可以使用json.loads 将字符串转换为 json。但是,您必须 import json 这是另一个库(尽管它也包括在内)。
  • 最终你会想要将字符串转换为字典,因为这是最快和最合乎逻辑的方法。如果您在任何时候都将对象作为字典,那么您不必导入任何库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 1970-01-01
相关资源
最近更新 更多