查找具有部分字符串匹配的目录中的文件

时间:2016-05-24 17:54:11

标签: python glob

我有一个包含以下文件的目录:

apple1.json.gz
apple2.json.gz
banana1.json.gz
melon1.json.gz
melon2.json.gz

我希望找到所有applebananamelon文件类型。

SO answer我知道我可以通过文件类型找到:

import glob, os
os.chdir("/mydir")
for file in glob.glob("*.json.gz"):
    print(file)

但是,在我的情况下,我无法通过文件名或文件类型进行匹配。相反,它是部分文件名匹配(所有apple等等)

在这个SO question中,提出了这个解决方案:

[in] for file in glob.glob('/path/apple*.json.gz'):
    print file

然而,这会返回零

[out]
     0

2 个答案:

答案 0 :(得分:6)

将文件放在/mydir中,如下所示

mydir
├── apple1.json.gz
├── apple2.json.gz
├── banana1.json.gz
├── melon1.json.gz
└── melon2.json.gz

你可以做到

import glob
import os

os.chdir('/mydir')
for file in glob.glob('apple*.json.gz'):
    print file

import glob

for file in glob.glob('/mydir/apple*.json.gz'):
    print file

更改目录不会影响glob.glob('/absolute/path')

答案 1 :(得分:0)

双列表理解方法

我一直在寻找类似的工具,并且开发了一种双清单理解方法,该方法应该适合您的情况(我已经针对我的情况进行了测试)...

import os

def get_file_names_with_strings(str_list):
    full_list = os.listdir("path_to_your_dir")
    final_list = [nm for ps in str_list for nm in full_list if ps in nm]

    return final_list


print(get_file_names_with_strings(['apple', 'banana', 'melon']))