0

假设我有一个文件列表,例如

files = ["C:\\MyDir\\some_file.txt",
         "C:\\MyDir\\another_file.txt",
         "C:\\MyDir\\some_file.old"]

我想提取以“some”开头的“.txt”文件。我使用标准的 fnmatch.filter 方法:

my_files = fnmatch.filter([os.path.basename(i) for i in files], "some*.txt")

返回 ["some_file.txt"]。现在假设这些文件实际上位于 SFTP 站点上,我想在过滤后从 SFTP 站点下载它们。如何获取要下载的文件的完整文件路径?

os.path.abspath("some_file.txt") 

由于明显的原因将无法正常工作。我可以简单地在我的过滤器模式前加上另一个通配符(“*”),但这是一种解决方法。有没有一种干净的方法可以做到这一点?

4

1 回答 1

0

如果您想要完整路径名,则必须对完整路径名应用过滤器。fnmatch模式有点有限,无论如何都会转换为正则表达式,所以为什么不直接使用re

import re
files = ["C:\\MyDir\\some_file.txt",
     "C:\\MyDir\\another_file.txt",
     "C:\\MyDir\\some_file.old"]

patern = re.compile(r"\\some[^\\]*\.txt$", re.I)
filtered_files = [f for f in files if pattern.search(f)]
于 2012-05-23T20:48:41.910 回答