从文件名中提取名称子字符串,并将其存储在Python中的变量中

从文件名中提取名称子字符串,并将其存储在Python中的变量中,python,Python,我有一个tar文件,我可以成功地读取它的名称并将其存储在变量中 tarname = 'esarchive--Mona-AB-Test226-8037affd-06d1-4c61-a91f-816ec9cb825f-05222017-4.tar' 但是如何从这个文件名中提取“Mona”并将其存储在变量中呢 (tar文件的文件名结构将与上述所有tar文件的文件名结构相同,名称位于“es archive--{name}-AB”之后,因此解决方案返回符合此格式的任何名称) 谢谢 我能想到的最简单的方法

我有一个tar文件,我可以成功地读取它的名称并将其存储在变量中

tarname = 'esarchive--Mona-AB-Test226-8037affd-06d1-4c61-a91f-816ec9cb825f-05222017-4.tar'
但是如何从这个文件名中提取“Mona”并将其存储在变量中呢

(tar文件的文件名结构将与上述所有tar文件的文件名结构相同,名称位于“es archive--{name}-AB”之后,因此解决方案返回符合此格式的任何名称)


谢谢

我能想到的最简单的方法是:

  • -
    字符上拆分文件名
  • 从结果列表(索引2)中获取第三项
  • 代码:

    filename.split('-')[2]
    
    简单的一行。这当然是根据你的例子。我需要更多的示例文件名来说明可能的变化,并确定这是否始终有效。

    模块适用于此类内容。你可以把它看作是一个反义词

    >>> import re
    >>> tarname = "esarchive--Mona-AB-Test226-8037affd-06d1-4c61-a91f-816ec9cb825f-05222017-4.tar"
    >>> s = re.match("esarchive--(\w+)-AB", tarname).group(1)
    >>> s
    'Mona'
    
    演示:

    >>> result = parse(pattern, tarname)
    >>> result['Name']
    'Mona'
    >>> result.named
    {'Name': 'Mona',
     'otherstuff': 'Test226-8037affd-06d1-4c61-a91f-816ec9cb825f-05222017-4'}
    

    名称中可以包含破折号吗?如果没有,我会倾向于使用
    tarname.split('-')[2]
    。我们需要更多关于您可能遇到的一组文件名的信息来回答这个问题。这个名字可能是一个简单的名字,就像您和我的名字一样,但是它前面和后面的破折号是我为不同的人收到的原始文件的一部分。比如,-Jamy ABBest一般使用的答案。这种方法的问题是,如果数据并非总是完全如预期的那样,您可能会得到一个错误的结果(悄悄地,当您希望引发某种未处理的异常时),这真的很有帮助。用我现有的代码工作得很有魅力!
    >>> result = parse(pattern, tarname)
    >>> result['Name']
    'Mona'
    >>> result.named
    {'Name': 'Mona',
     'otherstuff': 'Test226-8037affd-06d1-4c61-a91f-816ec9cb825f-05222017-4'}