()今天要解决昨天出现的递归程序在没有获取当前文件夹下所有文件的大小便直接跳进子文件夹从而遗漏文件的BUG。
想到可以把当前文件夹中的文件和子文件夹进行排序,把所有文件都放在子文件夹的前面,这样程序就可以避免程序过早地进入子文件夹。
昨天写了排序的语句,但是不知道为什么达不到目的。重新写了一个排序的函数,发现只输出了一个文件,仔细程序发现,在每一次for循环后,count,ordered都被清空,所以最后结果只打印出一个文件。
修改变量声明在for之前,发现可以实现把子文件夹排列到最后的目的。
据此,发现昨天的程序也是错在这里。修改之后,得到所有文件的大小,保存在字典中。
得到字典后,下一步就是根据字典的值,对键排序。
自己写的遍历字典排序的程序,总是出错,网上找了按照字典的值排序的方法,成功。
在这个过程中,要注意的是,sorted()对字典操作之后,字典中的顺序仍然不变,只是sorted()的返回值中排序改变。
lambda为匿名函数,x,y相当于传入的参数,整个函数会返回x-y的值。lambda作为一个表达式,定义了一个匿名函数。代码中x,y为入口参数,x-y为函数体。在这里lambda简化了函数定义的书写形式。
对sorted中的 key = lambda x:x[1]不理解,尝试元组例子:
发现key = lambda x:x[1]只是表达一个索引,即表示按照被排序的对象的第几个元素排序。如x:x[0],则是对字典中的'键'排序;
x:x[1],则是对字典中的'值'排序。
列表list中居然还可以保存元组turple:
成功实现打印:
元组: