Python中如何根据反斜杠提取列表字符串的前缀部分
问题描述
我有一个Python文件名列表(实际更长):
filenames = ['BETON\\map (120).png', 'BETON\\map (125).png', 'BETON\\map (134).png', 'BETON\\map (137).png', 'TUILES\\map (885).png', 'TUILES\\map (892).png', 'TUILES\\map (924).png', 'TUILES\\map (936).png', 'TUILES\\map (954).png', 'TUILES\\map (957).png', 'TUILES\\map (97).png', 'TUILES\\map (974).png', 'TUILES\\map (987).png']
想要提取每个文件名中反斜杠\之前的部分作为文件类型,得到如下结果:
result = ['BETON', 'BETON', 'BETON', 'BETON', 'TUILES', 'TUILES', 'TUILES', 'TUILES', 'TUILES', 'TUILES', 'TUILES', 'TUILES', 'TUILES']
之前用截取前5个字符的方法实现,但随着文件类型增多且长度不一,这个方法不再适用,想知道怎么根据反斜杠提取对应内容。
解决方案
方法1:字符串split()方法
直接按反斜杠分割字符串,取第一个元素即可。注意Python中反斜杠是转义字符,所以要写成'\\'作为分隔符:
def Extract(files): return [item.split('\\')[0] for item in files] # 调用示例 files2 = Extract(filenames)
这种方法简单直接,适合路径格式固定(每个路径只有一个反斜杠)的场景。
方法2:使用os.path模块(推荐)
处理文件路径最好用Python内置的os.path模块,它能自动适配不同操作系统的路径分隔符(Windows的\、类Unix的/),兼容性更强:
import os def Extract(files): # 方法A:用split拆分路径 return [os.path.split(item)[0] for item in files] # 或者用dirname直接获取目录部分 # def Extract(files): # return [os.path.dirname(item) for item in files]
os.path.split()会返回一个元组,第一个元素是路径的目录部分(也就是反斜杠前的内容);os.path.dirname()则直接返回路径的目录部分,两种方式效果一致。
方法3:正则表达式(复杂场景适用)
如果遇到更复杂的路径格式(比如多个反斜杠但只需要第一个前面的内容),可以用正则表达式精准匹配:
import re def Extract(files): # 匹配开头到第一个反斜杠的内容 pattern = re.compile(r'^([^\\]+)\\') return [pattern.match(item).group(1) for item in files]
正则表达式^([^\\]+)\\的意思是:从字符串开头开始,匹配所有不是反斜杠的字符,直到遇到第一个反斜杠为止,捕获这部分内容作为结果。
内容的提问来源于stack exchange,提问作者Julie-Anne
相关产品推荐
相关产品推荐

