检查文件名是否包含列表中单词的子字符串

时间:2017-12-06 22:48:08

标签: python

我有一个关键字列表,我想通过一个目录查找包含关键字的文件名。如果找到,则将匹配的关键字和文件路径绑定到字典。

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'}

现在如何找到匹配?

2 个答案:

答案 0 :(得分: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)
但是,

这并不能处理重复项。如果您要存储所有匹配的文件名,只需将result初始化为collections.defaultdict(list),然后在设置找到的关键字时使用:result[keyword].append(os.path.join(directory, filename))

答案 1 :(得分: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