python 从文件路径的末尾提取文件名,而不是从文件路径中的其他位置提取文件名

y3bcpkx1  于 2023-05-05  发布在  Python
关注(0)|答案(1)|浏览(192)

锁定19小时此问题的评论已被禁用,但仍在接受新的答案和其他交互。Learn more

我正在尝试从几个不同的路径中提取文件名。除了RegEx还捕获安装程序名或文件名前面的.tmp文件名之外,一切正常。
下面是一个示例列表:

logs = ['C:\\\\Users\\\\Administrator\\\\Desktop\\\\KeyFinderInstaller.exe({tmp}\\\\OCSetupHlp.dll)',
        'F:\\\\NOKIA N70\\\\RICAMI\\\\700 ESEMPI\\\\PCStitch 7.0.13 + Keygen(programma per punto croce)\\\\keygen.exe',
        'F:\\\\Programmi & Utility Pc\\\\Nero 8 (conversione film & creazione videosuonerie)\\\\keygen.exe',
        'C:\\\\Users\\\\user\\\\Desktop\\\\BloodHound-win32-x64\\\\BloodHound-win32-x64\\\\resources\\\\app\\\\Collectors\\\\SharpHound.exe',
        'C:\\\\Users\\\\user\\\\Desktop\\\\BloodHound-win32-x64\\\\BloodHound-win32-x64\\\\resources\\\\app\\\\Collectors\\\\DebugBuilds\\\\SharpHound.ps1'
        ]

RegEx如下:

filename = [re.sub('\\\\','',re.search('\\\\[\w-]+\.\w{3}',log).group()) for log in logs]

输出:

['KeyFinderInstaller.exe', 'keygen.exe', 'keygen.exe', 'SharpHound.exe', 'SharpHound.ps1']

预期输出:

['OCSetupHlp.dll', 'keygen.exe', 'keygen.exe', 'SharpHound.exe', 'SharpHound.ps1']

如您所见,正则表达式返回KeyFinderInstaller.exe而不是OCSetupHlp.dll。长话短说,我需要路径最末端的文件名,而不是中间的任何其他文件名。
另外,我想摆脱\\\\,但显然我的re.sub()解决方案不起作用。谢谢你的帮助!

xxhby3vn

xxhby3vn1#

对于与您的示例中的条目类似的条目,这是有效的(.strip()用于删除右括号)。

filename = [log.split('\\\\')[-1].strip(')') for log in logs]

如果在最后一个文件名后面可能有'junk'(而不仅仅是括号),则以下内容应适用于更多条目:

filename = [re.findall(r'\\([-\w]+\.\w+)', log)[-1] for log in logs]

相关问题