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

Python 检查文件名是否在列表中包含单词的子字符串,python,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 keywor

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

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

现在,我如何找到匹配项?

对于这种情况,没有一个很好的一行,因为您需要知道哪个关键字匹配。显式循环是您的最佳选择:

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

对于这个例子,没有一个好的一行,因为你需要知道哪个关键字匹配。显式循环是您的最佳选择:

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

你让事情变得比需要的更复杂:

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)

但是,这不处理重复的。如果要存储所有匹配的文件名,只需将结果初始化为collections.defaultdictlist,然后在设置找到的关键字时使用:result[keyword].appendos.path.joindirectory,filename

,这样做比需要的更复杂:

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)

但是,这不处理重复的。如果要存储所有匹配的文件名,只需将结果初始化为collections.defaultdictlist,然后在设置找到的关键字时使用:result[keyword].appendos.path.joindirectory,文件名

文件名中不应该有if关键字吗?文件名中不应该有if关键字吗?是的,我想可能会有一行字匹配功能。是的,我想可能会有一行字匹配功能。谢谢,这很有效。目录中没有重复的文件名,所以这对我很好。谢谢,这很有效。目录中没有重复的文件名,所以这对我很好。