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

2024-03-29 13:29:30 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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.chdir公司()要进入我要浏览的目录,此脚本的工作范围是返回一个字典,字典的键是目录中的扩展名,其值是正确标识扩展名出现的次数、具有该扩展名的最大文件的大小以及最小的。错误之处在于平均值在一种情况下计算正确,而在其他情况下则不正确,但方式不一致。在

有什么解决办法吗?我想让字典把每种情况的平均数都列出来。我是Python和编程新手,很明显我遗漏了一些东西!在

提前谢谢。在


Tags: 文件pathnamein目录forsizeif
3条回答

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

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

(您的变量root实际上不是目录树的“根”;它是每个目录,其文件被列在files中。)

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

在你的最后一步

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

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

^{pr2}$

尝试:

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)

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

使用float,如果你不这么做,答案就不准确了。在

相关问题 更多 >