Python 生成文件扩展名和大小字典的程序

Python program to produce dictionary of file extensions and sizes

我正在尝试在 Python 中创建一个程序,它将搜索一个文件目录并创建一个字典,其中 ose 键是目录中的各种文件扩展名,而 whose 个值构成列表,其中包含扩展名在目录中出现的次数、具有该扩展名的最大文件的大小、最小文件的大小以及具有该扩展名的文件的平均大小。

到目前为止我已经写了以下内容:

for root, dirs, files in os.walk('.'):
        contents={}
        for name in files:
            size=(os.path.getsize(name))
            title, extension=os.path.splitext(name)
            if extension not in contents:
                contents[extension]=[1, size, size, size]
            else:
                contents[extension][0]=contents[extension][0]+1
                contents[extension][3]=contents[extension][3]+size
                if size>=contents[extension][1]:
                    contents[extension][1]=size
                elif size<contents[extension][2]:
                    contents[extension][2]=size
        contents[extension][3]=contents[extension][3]/contents[extension][0]
        print(contents)

如果我导入 os 并使用 os.chdir() 进入我想浏览的目录,这个脚本的工作范围是 returns 字典 whose 键是目录中的扩展名,而 whose 值是正确识别扩展名出现次数、具有该扩展名的最大文件大小以及最小文件大小的列表。错误的地方是在一种情况下平均值计算正确,但在其他情况下它不正确但方式不一致。

有什么解决这个问题的建议吗?我希望字典在每种情况下都显示适当的平均值。我是 Python 和编程的新手,显然缺少一些东西!

提前致谢。

有一点肯定是个问题,那就是要获取文件的大小,您需要使用正确的相对路径。当 os.walk() 递归到子目录时,相对路径是 root+"/"+name —— 而不仅仅是 name。所以你应该得到这样的尺寸:

size=os.path.getsize(root+"/"+name)

(您的变量 root 实际上不是目录树的 "root";它是文件在 files 中列出的每个目录。)

这能解决问题吗?谁知道。您的代码现在应该引发异常,所以要么您没有任何子目录,要么您没有向我们展示您的完整代码。

在你的最后一步中,

contents[extension][3]=contents[extension][3]/contents[extension][0]

您只对单个扩展程序执行此操作,您需要遍历所有扩展程序:

for extension in contents:
    contents[extension][3]=contents[extension][3]/contents[extension][0]

尝试:

for root, dirs, files in os.walk('.'):
        contents={}
        for name in files:
            size=(os.path.getsize(name))
            title, extension=os.path.splitext(name)
            if extension not in contents:
                contents[extension]=[1, size, size, size]
            else:
                contents[extension][0]=contents[extension][0]+1
                contents[extension][3]=contents[extension][3]+size
                if size>=contents[extension][1]:
                    contents[extension][1]=size
                elif size<contents[extension][2]:
                    contents[extension][2]=size

        for k in contents.keys():
            contents[k][3]=contents[k][3] / float(contents[k][0])

        print(contents)

您只计算其中一个扩展的平均值,即最后一个。

并使用浮点数,如果不这样做,答案将不准确。