读取文件名并将该名称的一部分应用于变量

时间:2015-10-14 02:23:59

标签: python

我希望过滤目录中的文件,然后将部分filename(我尝试匹配更改的值)分配给变量。 filename的结构与以下示例一致。 *test file on part-of-filename-of-interest.csvfilename的最后一部分是我想要添加到变量值的部分。所以它始终是文件名的最后一部分,在单词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

3 个答案:

答案 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]