在单词中用斜杠分隔行并使用/W,但要避免:

2024-09-30 12:16:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图解析一个包含很多行的txt文件,如下所示:

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

我正在制作一个字典,其中key是行中的第一个数字,值是(对于每个键)由斜杠"/"分隔的单词,每个单词都保存到一个列表中,例如list1获取所有{},list2将是所有{},等等

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

我是python的新人,如果这是dummys的话,我很抱歉 无论如何,提前谢谢你


Tags: 文件txt列表cms单词tracker斜杠dcs
2条回答

使用^{}首先匹配数字后面的空格,然后匹配“/”:

>>> 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']
>>>

或者作为(不太明显的)一句话:

^{pr2}$

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

正如Trimax的注释所示::(冒号)是一个非单词字符,所以要正确分割行,您需要在模式中包含它。或者用西娅的答案。在

关于模式,\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:]

但是请注意,如果文本包含具有相同数字的行,则会丢失数据,因为在为现有键分配新值(本例中为单词列表)时,它将覆盖以前的值。在

相关问题 更多 >

    热门问题