假设我有一个文件列表,例如
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")
由于显而易见的原因不起作用。我可以简单地在我的过滤器模式前添加另一个通配符(“*”),但这是一种解决方法。有干净的方法吗?
答案 0 :(得分: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)]