web-dev-qa-db-ja.com

部分的に文字列が一致するディレクトリ内のファイルを検索する

次のファイルを含むディレクトリがあります。

Apple1.json.gz
Apple2.json.gz
banana1.json.gz
melon1.json.gz
melon2.json.gz

Applebananamelonのすべてのファイルタイプを検索したいと思います。

これから SO回答 ファイルタイプごとに次の方法で検索できることがわかります。

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

ただし、私の場合、ファイル名またはファイルタイプで照合することはできません。むしろそれは部分的なファイル名の一致です(すべてのAppleなど)。

この SO質問 では、この解決策が提案されました:

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

ただし、これはゼロを返します

[out]
     0
7
LearningSlowly

次のように_/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')には影響しません。

9
Simon Fromme

二重リスト内包法

私は同様のツールを探していて、あなたのケースにうまくいくはずの二重リスト理解方法を開発しました(私は私のケースでテストしました)...

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']))
0
Thom Ives