我希望过滤目录中的文件,然后将部分filename
(我尝试匹配更改的值)分配给变量。 filename
的结构与以下示例一致。
*test file on part-of-filename-of-interest.csv
。 filename
的最后一部分是我想要添加到变量值的部分。所以它始终是文件名的最后一部分,在单词on
之后。
我可以使用以下内容过滤所有感兴趣的文件,但我不确定如何抓取part-of-filename-of-interest
部分将其置于变量值。
for root, dirs, files in os.walk('dirpath'):
filters = '*test file on*.csv'
for filename in fnmatch.filter(files, filters):
print filename #I get all the files im interested in but I dont know how to capture the relevant part of the filename to place it in a variable
答案 0 :(得分:1)
根据您的模式的一致性,这适用于您吗?
>>> fn = 'test file on part-of-filename-of-interest.csv'
>>> import os
>>> os.path.splitext(fn[fn.find('test file on') + 13:])[0]
'part-of-filename-of-interest'
答案 1 :(得分:1)
尝试使用正则表达式匹配您想要的部分。
import re
p = re.compile("(?<=on ).+")
filename = "*test file on part-of-filename-of-interest.csv"
new_filename = p.search(filename).group(0)
如果您不希望包含.csv,请将正则表达式更改为:
p = re.compile("(?<=on ).+(?=.csv)")
这是前瞻和后视的一个很好的例子。
答案 2 :(得分:1)
如果无法使用fnmatch
访问您要查找的内容,则最简单,最快速的解决方案可能是字符串方法:
print filename.partition('on')[2]