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

Python 读取文件名并将该名称的一部分应用于变量,python,Python,我希望筛选目录中的文件,然后将文件名(我试图匹配更改的值)的一部分分配给变量。文件名的结构与以下示例一致。 *感兴趣的文件名.csv部分的测试文件。文件名的最后一部分是我想添加到变量值中的部分。因此,它将始终是文件名的最后一部分,位于上的单词之后 我可以使用下面的筛选工具筛选所有感兴趣的文件,但我不确定如何获取感兴趣文件名的部分部分以将其设置为变量值 for root, dirs, files in os.walk('dirpath'): filters = '*test file on

我希望筛选目录中的文件,然后将
文件名
(我试图匹配更改的值)的一部分分配给变量。
文件名的结构与以下示例一致。
*感兴趣的文件名.csv部分的测试文件
文件名的最后一部分是我想添加到变量值中的部分。因此,它将始终是文件名的最后一部分,位于
上的单词
之后

我可以使用下面的筛选工具筛选所有感兴趣的文件,但我不确定如何获取感兴趣文件名的
部分
部分以将其设置为变量值

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

根据您的模式的一致性,这是否适合您

>>> 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'

根据您的模式的一致性,这是否适合您

>>> 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'

根据您的模式的一致性,这是否适合您

>>> 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'

根据您的模式的一致性,这是否适合您

>>> 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'

尝试使用正则表达式来匹配所需的零件

import re
p = re.compile("(?<=on ).+")
filename = "*test file on part-of-filename-of-interest.csv"
new_filename = p.search(filename).group(0)
重新导入

p=re.compile(“(?尝试使用正则表达式来匹配所需的部分

import re
p = re.compile("(?<=on ).+")
filename = "*test file on part-of-filename-of-interest.csv"
new_filename = p.search(filename).group(0)
重新导入

p=re.compile(“(?尝试使用正则表达式来匹配所需的部分

import re
p = re.compile("(?<=on ).+")
filename = "*test file on part-of-filename-of-interest.csv"
new_filename = p.search(filename).group(0)
重新导入

p=re.compile(“(?尝试使用正则表达式来匹配所需的部分

import re
p = re.compile("(?<=on ).+")
filename = "*test file on part-of-filename-of-interest.csv"
new_filename = p.search(filename).group(0)
重新导入

p=re.compile((?如果无法使用
fnmatch
访问您要查找的内容,最简单、最快的解决方案可能是字符串方法:

print filename.partition('on')[2]

如果无法使用
fnmatch
访问所需内容,最简单、最快的解决方案可能是字符串方法:

print filename.partition('on')[2]

如果无法使用
fnmatch
访问所需内容,最简单、最快的解决方案可能是字符串方法:

print filename.partition('on')[2]

如果无法使用
fnmatch
访问所需内容,最简单、最快的解决方案可能是字符串方法:

print filename.partition('on')[2]



确实需要嵌套循环吗?不需要。这是因为示例中没有多个dir;)。不管嵌套循环是什么,问题是将部分文件名捕获到变量。而不是如何循环文件。我能够根据DigitalLink的答案组成一个工作筛选器。是否确实需要嵌套循环?不需要。这是因为示例没有多个目录;)。不管嵌套循环是什么,问题是将部分文件名捕获到变量。而不是如何循环文件。我能够根据DigitalLink的答案组成一个工作筛选器。是否确实需要嵌套循环?不需要。这是因为示例没有多个目录;)。不管嵌套循环是什么,问题是将部分文件名捕获到变量。而不是如何循环文件。我能够根据DigitalLink的答案组成一个工作筛选器。是否确实需要嵌套循环?不需要。这是因为示例没有多个目录;)。不管嵌套循环是什么,问题在于将部分文件名捕获到变量。而不是如何循环文件。我能够根据digitaLink的答案组成一个工作过滤器。这几乎可以工作,但是它也可以在
字上打印
。这非常有效
p.search(filename).group(0)。replace('on','')
为了完整起见,请您将上述注释代码添加到您的答案中,我将无法接受。谢谢@digitaLink,它还附加了文件名,但我确信我可以解决如何清理。这几乎可以正常工作,但它也可以在
word上打印
。这非常有效
p.search(filename).group(0)。替换('on','')
为了完整起见,请您将上述注释代码添加到您的答案中,我无法接受。谢谢@digitaLink,它还附带了文件名,但我确信我可以解决如何清理。这几乎可以用,但它也可以在
单词上打印
。这非常有效
p.search(filename).group(0).replace('on','')
为了完整起见,请您将上述注释代码添加到您的答案中,我不会接受。谢谢@digitaLink,它还有附加的文件名,但我确信我可以解决如何清理。这几乎可以用,但是它也可以在
单词上打印
。这非常有效
p.search(文件名).组(0)。替换('on','')
为了完整起见,能否请您将上述注释代码添加到您的答案中,我将不被接受谢谢@digitaLink,它还有附加的文件名,但我确信我可以解决如何清理它。不幸的是,感兴趣部分的长度与响应BlivetWidget的长度不同。@iNoob这是怎么回事?above函数不关心感兴趣的部分有多长。@BilvetWidget抱歉,我没有理解代码。@iNoob不用担心,它有点复杂。如果将“fn.find('test file on')+13”改为“fn.find('test file on'),可能会更长,但更清晰”首先是它自己的变量。不幸的是,响应BlivetWidget的感兴趣部分的长度会变长。@iNoob这有多不幸?上面的函数不关心感兴趣部分的长度。@BilvetWidget抱歉,我没有理解代码。@iNoob不必担心,它有点复杂。它会更长,但更清晰ps,使“fn.find('testfile on')+13”首先是它自己的变量。不幸的是,响应BlivetWidget的感兴趣部分的长度会变长。@iNoob这有多不幸?上面的函数不关心感兴趣部分的长度。@BilvetWidget抱歉,我没有理解代码。@iNoob不必担心,它有点复杂。它会更长,但更清晰ps,首先将“fn.find('test file on')+13”作为自己的变量。不幸的是,感兴趣部分的长度不适合响应BlivetWidget。@iNoob怎么会这样不幸?上面的函数不在乎