用斜线分隔单词并使用/ W但避免:

时间:2014-07-22 10:49:56

标签: python parsing space slash

我试图解析一个包含很多这样的行的txt文件:

470115572 cms_trk_dcs_05:CAEN/CMS_TRACKER_SY1527_7/branchController00/easyCrate3/easyBoard16/channel003

我正在创建一个字典,其中键是该行的第一个数字,并且值(对于每个键)由斜杠"/"分隔的单词,每个单词都保存到一个列表中,例如list1获取所有cms_trk_dcs_05:CAENlist2全部为CMS_TRACKER_SY1527_7等等

但是当我使用pattern = re.split('\W',line)分割线时,它会考虑到 ":"字符,我的意思是当我尝试打印cms_trk_dcs_05:CAEN时它只返回cms_trk_dcs_05,如何在列表中保存所有单词cms_trk_dcs_05:CAEN,并保存在我的列表中所有用斜线分隔的单词

我是python的新手,所以如果这是dummys,我道歉 无论如何,提前谢谢你

2 个答案:

答案 0 :(得分:0)

使用split()首先匹配数字后的空格,然后匹配'/':

>>> stringin = "470115572 cms_trk_dcs_05:CAEN/CMS_TRACKER_SY1527_7/branchController00/easyCrate3/easyBoard16/channel003"
>>> splitstring = stringin.split(' ')
>>> num = splitstring[0]
>>> stringlist = splitstring[1].split('/')
>>> num
'470115572'
>>> stringlist
['cms_trk_dcs_05:CAEN', 'CMS_TRACKER_SY1527_7', 'branchController00', 'easyCrate3', 'easyBoard16', 'channel003']
>>>

或者作为一个(不太明显的)单线:

>>> [x.split('/') for x in stringin.split(' ')]

[['470115572'], ['cms_trk_dcs_05:CAEN', 'CMS_TRACKER_SY1527_7', 'branchController00', 'easyCrate3', 'easyBoard16', 'channel003']]

请注意,第二种方法是将第一个元素创建为列表。

答案 1 :(得分:0)

与Trimax的评论一样::(冒号)是一个非单词字符,因此要正确分割线条,您需要将其包含在模式中。或者使用SiHa的答案。

关于模式,\W等于[^a-zA-Z0-9_]https://docs.python.org/2/library/re.html#regular-expression-syntax),因此您只需添加冒号即可:[^a-zA-Z0-9_:]

至于第二部分,只使用结果列表的第一个元素作为dict键,并以切片的形式为其分配剩余列表。 像这样:

    result_dict = {}
    for line in file_lines:
        line_splitted = re.split('[^a-zA-Z0-9_:]+', line)
        result_dict[line_splitted[0]] = line_splitted[1:]

但请注意,如果您的文字包含具有相同数字的行,那么您将丢失数据,就像将新值(在这种情况下为单词列表)分配给现有密钥一样,它将覆盖以前的值。