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关键字吗?是的,我想可能会有一行字匹配功能。是的,我想可能会有一行字匹配功能。谢谢,这很有效。目录中没有重复的文件名,所以这对我很好。谢谢,这很有效。目录中没有重复的文件名,所以这对我很好。