Python读取文件夹并按文件类型生成字典的实现求助
按文件类型分类文件夹中的视频文件
你的代码存在几个问题,导致无法生成预期的字典结构,以下是修正后的实现:
基础版实现
import os import pathlib class Meta: def __init__(self, path): self.path = path def read(self): data = {} # 遍历目标路径下的所有文件/目录名 for file in os.listdir(self.path): # 拼接文件完整路径,确保判断文件类型的准确性 full_path = os.path.join(self.path, file) # 只处理文件,跳过子目录 if os.path.isfile(full_path): # 获取小写的文件后缀(去除开头的点) ext = pathlib.Path(file).suffix.lower().strip(".") # 如果当前后缀未在字典中,先初始化空列表 if ext not in data: data[ext] = [] # 将文件名追加到对应后缀的列表中 data[ext].append(file) # 将列表转为元组,匹配你期望的结构 for ext in data: data[ext] = tuple(data[ext]) return data path = "Z:\\Videos" m = Meta(path) f = m.read() print(f)
简化版(用collections.defaultdict)
如果想让代码更简洁,可以用defaultdict自动初始化空列表,省去判断键是否存在的步骤:
import os import pathlib from collections import defaultdict class Meta: def __init__(self, path): self.path = path def read(self): data = defaultdict(list) for file in os.listdir(self.path): full_path = os.path.join(self.path, file) if os.path.isfile(full_path): ext = pathlib.Path(file).suffix.lower().strip(".") data[ext].append(file) # 转换为普通字典,并将所有列表转为元组 return {ext: tuple(files) for ext, files in data.items()} path = "Z:\\Videos" m = Meta(path) f = m.read() print(f)
关键修正点
- 完整路径拼接:必须用
os.path.join把目标路径和文件名拼接成完整路径,否则os.path.isfile会判断当前工作目录下的文件,而非你指定的Z:\\Videos。 - Python的列表追加逻辑:Python没有PHP中
data[ext][] = file的语法,需要先初始化对应后缀的列表,再用append添加元素。 - 转元组处理:如果你需要严格匹配预期的元组结构,最后把每个后缀对应的列表转为元组;如果用列表也能满足需求,可直接去掉转元组的代码。
内容的提问来源于stack exchange,提问作者Lian Thang
相关产品推荐
相关产品推荐

