2017-12-06 3 views
0

私はキーワードのリストを持っており、キーワードを含むファイル名を探しているディレクトリを調べたいと思っています。見つかった場合は、一致するキーワードとファイルパスを辞書にバインドします。filenameにリスト内の単語の部分文字列があるかどうかをチェックする

keywords = ['mon', 'tue', 'wed'] 
dict = {} 

directory = os.fsencode(r"my_dir") 

for file in os.listdir(directory): 
    filename = os.fsdecode(file) 
    ext = Path(file).suffix 

    if filename in keywords: 
    filepath = os.path.join(directory, filename, ext) 
    dict[keyword] = filepath 

だから、最後に、私はこのような何かしたい:

{'mon': 'F:\mon_001.txt', 'tue': 'F:\tue_999.txt', 'wed': 'F\wed_123.txt'} 

を今どのように私は試合を見つけるのですか?

+0

"if keywords in filename"を使用しないでください。 – SuperStew

答えて

2

あなたはそれが必要以上にこのより複雑になっている:これは、しかし、重複を処理しない

import os 

keywords = ['mon', 'tue', 'wed'] 

directory = "my_dir" 

result = {} # dict store our results 

for filename in os.listdir(directory): 
    for keyword in keywords: 
     if keyword in filename: 
      result[keyword] = os.path.join(directory, filename) 

明示的なループはあなたの最善の策です。一致するすべてのファイル名を保存する場合はresultcollections.defaultdict(list)に初期化し、見つかったキーワードを設定する場合はresult[keyword].append(os.path.join(directory, filename))

+0

ありがとう、これは動作します。ディレクトリに重複するファイル名はありませんので、これは私には良いでしょう。 – reddy

1

のキーワードが一致することを知っておく必要があるため、このケースではいいライナーはありません。

for file in os.listdir(directory): 
    filename = os.fsdecode(file) 
    ext = Path(file).suffix 
    for keyword in keywords: 
     if keyword in filename: # this tests for substrings 
     filepath = os.path.join(directory, filename, ext) 
     dict[keyword] = filepath 
     break 
+0

はい、1行の単語マッチング機能があるかもしれないと私は考えていました。 – reddy

関連する問題