我有一个关键字列表,我想通过一个目录查找包含关键字的文件名。如果找到,则将匹配的关键字和文件路径绑定到字典。
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 :(得分: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