【发布时间】:2014-09-03 13:27:50
【问题描述】:
我想从某些文件路径中获取文件的字母部分。
files = ['data/Conversion/201406/MM_CLD_Conversion_Advertiser_96337_Daily_140606.zip',
'data/Match/201406/MM_CLD_Match_Advertiser_111423_Daily_140608.csv.zip',
'data/AQlog/201406/orx140605.csv.zip',
'data/AQlog/201406/orx140605.csv.zip/']
目前我这样做:
- 带尾斜线
- os.path.split()[1] 获取文件名
- 两个
os.path.splitext()删除可能的 2 个文件扩展名 - 输数字
- 省略下划线
代码:
for f in files:
a = os.path.splitext(os.path.splitext(os.path.split(f.rstrip('/\\'))[1])[0])[0]
b = re.sub('\d+', '', a).replace('_','')
结果:
'MMCLDConversionAdvertiserDaily'
'MMCLDMatchAdvertiserDaily'
'orx'
'orx'
有没有更快或更pythonic的方式,使用编译的正则表达式函数?还是尝试使用库os.path() 非常合理?我也不必这样做超过 100 次,所以这不是速度问题,这只是为了清楚起见。
【问题讨论】:
-
当你在下一个句子中说“我也不必这样做超过 100 次,所以这不是速度问题”时,为什么要问“有没有更快的……方法”?如果速度不是问题,为什么要要求速度?
-
另外,您知道如何查找文档吗?如果是这样,为什么使用
os.path.split()[1]而不是os.path.basename()? -
嗨@abarnert!我只是对速度感到好奇,因为我的印象是编译的正则表达式函数非常快。是的,错过了
os.path.basename(),因为我之前玩过 os.path 并且这次没有仔细查看文档。 -
我将在我的答案中添加一些关于已编译正则表达式的内容......