You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 09:20:39