我试图用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和编程新手,很明显我遗漏了一些东西!在
提前谢谢。在
有一件事肯定是一个问题:要获得文件的大小,您需要使用正确的相对路径。当
os.walk()
递归到子目录中时,相对路径是root+"/"+name
,而不仅仅是name
。所以你应该得到这样的尺寸:(您的变量
root
实际上不是目录树的“根”;它是每个目录,其文件被列在files
中。)这能解决问题吗?谁知道呢。你的代码现在应该引发一个异常,所以要么你没有任何子目录,要么你没有向我们展示完整的代码。在
在你的最后一步
您只对单个扩展执行此操作,您需要遍历所有扩展:
^{pr2}$尝试:
你只计算其中一个扩展的平均值,最后一个。在
使用float,如果你不这么做,答案就不准确了。在
相关问题 更多 >
编程相关推荐