当我尝试将此代码转换为函数时,它无法正常工作。该代码应该采用目录并报告内容摘要,其中包括文件扩展名的文件的计数,最大值,最小值和平均大小。当我在函数外部运行时,它可以工作,但是当我尝试转换为函数时,它只给出了它遇到的第一个文件类型的统计数据。为什么不迭代?我确定它的东西小而明显!
def directory_summary(a_dir):
import os
from collections import defaultdict
os.chdir(a_dir)
mydir = os.listdir(os.curdir)
filedict = {}
ext_str = 'file type:'
cnt_str = 'count:'
max_str = 'max. size:'
min_str = 'min. size:'
avg_str = 'avg. size:'
def calc_avg(num_list):
return round(sum (num_list) / len(num_list))
for file in mydir:
fileext = os.path.splitext(file)[1]
filesz = os.path.getsize(file)
filedict.setdefault(fileext,[]).append(filesz)
print ('Summary of directory contents:')
for ext, sz in filedict.items():
return print(ext_str+ext,cnt_str,len(sz),max_str,max(sz),min_str,min(sz), avg_str,calc_avg(sz))
myd = r'C:\GIS'
directory_summary(myd)
答案 0 :(得分:0)
return
在以下setenece中使循环过早停止。
for ext, sz in filedict.items():
return print(ext_str+ext,cnt_str,len(sz),max_str,max(sz),min_str,min(sz), avg_str,calc_avg(sz))
删除return
:
for ext, sz in filedict.items():
print(ext_str+ext,cnt_str,len(sz),max_str,max(sz),min_str,min(sz), avg_str,calc_avg(sz))
答案 1 :(得分:0)
for ext, sz in filedict.items():
循环第一次运行时,会立即从中返回。
试试这个版本:
import os
def calc_avg(num_list):
return round(sum (num_list) / len(num_list))
def directory_summary(a_dir):
os.chdir(a_dir)
mydir = os.listdir(os.curdir)
filedict = {}
ext_str = 'file type:'
cnt_str = 'count:'
max_str = 'max. size:'
min_str = 'min. size:'
avg_str = 'avg. size:'
for file in mydir:
fileext = os.path.splitext(file)[1]
filesz = os.path.getsize(file)
filedict.setdefault(fileext,[]).append(filesz)
return_values = []
for ext, sz in filedict.items():
values = (ext_str+ext,
cnt_str,
str(len(sz)),
max_str,
str(max(sz)),
min_str,
str(min(sz)),
avg_str,
str(calc_avg(sz)))
return return_values
myd = r'C:\GIS'
print ('Summary of {0} contents:'.format(myd))
results = directory_summary(myd)
for i in results:
print(i)