周游世界LEON 发表于 2020-12-30 11:05:38

type_dict[‘文件夹’]+= 1 要达到什么目的?

第30课后作业第一题,按我个人的理解,对参考答案进行了标注(如下),但对其中的 type_dict[‘文件夹’]+= 1 的作用,理解不了。
如果是计数的话,上一句type_dict.setdefault(‘文件夹’,0)中的0不该是1吗?type_dict[‘文件夹’] += 1 的作用是啥?
请高手指教!

import os

all_files = os.listdir(os.curdir)#当前文件夹下有哪些和子目录

type_dict = dict()#建一个字典,空的

for each_file in all_files:
    if os.path.isdir(each_file):    #判断一个路径是否存在且是一个目录,
                                             #是目录,说明是一个文件夹,不是文件
      type_dict.setdefault('文件夹',0)      #字典中没有键(文件夹),所以添加一个项,并返回值0
      type_dict['文件夹']+= 1   #这一句是计数的功能吗?要迭代出“文件夹”的数量?
                                          #如果是,上一句的0不应该是1吗?
    else:
      ext = os.path.splitext(each_file)   #有扩展名的文件,分离文件名和扩展名
                                                            #返回一个元组(f_name,f_extension),把元组的第二个元素(扩展名)切割出来
      type_dict.setdefault(ext,0)                #在字典里增加切出来的扩展名,并赋值
      type_dict+= 1                         #对字典中每个ext 如是操作

for each_type in type_dict.keys():      #把字典里的键找出来形成一个列表,对每一个键(包含文件夹和文件)操作
    print('该文件夹下共有类型为[%s]的文件%d个'%(each_type,type_dict))
    #%s格式化字符串,d%格式化整数,%s加中括号的意思让显示结果更醒目,中括号也可以去掉。

jackz007 发表于 2020-12-30 11:16:29

本帖最后由 jackz007 于 2020-12-30 11:22 编辑

         就是把文件夹也作为一种独立的文件类型,对目录内的文件夹单独进行计数。
      type_dict.setdefault('文件夹',0)      # 如果字典中没有键名为 '文件夹' 的项,那就添加一个,并设置其初始键值为 0 ;如果已经存在,则可忽略此句。
      type_dict['文件夹']+= 1               # 对键名为 '文件夹' 的项的键值加 1

周游世界LEON 发表于 2020-12-30 12:22:09

本帖最后由 周游世界LEON 于 2020-12-30 12:33 编辑

jackz007 发表于 2020-12-30 11:16
就是把文件夹也作为一种独立的文件类型,对目录内的文件夹单独进行计数。

周游世界LEON 发表于 2020-12-30 12:58:16

jackz007 发表于 2020-12-30 11:16
就是把文件夹也作为一种独立的文件类型,对目录内的文件夹单独进行计数。

谢谢提示,我想明白了,以下注释是我的思路
type_dict.setdefault('文件夹',0)   #字典中没有键(文件夹),所以添加一个项,并赋值0;
                                        #这里利用了setdefault()的特点:当下一次循环时,如果字典里存在该KEY,返回
                      它的对应的值。即使又设立了当前默认值(0),也不会改变原值(比如1,下一句的产生的值)
                      相当于,如果键已经存在,忽略此句。
type_dict['文件夹']+= 1   #对”文件夹“这个项返回的值+1,表示开始计数了……这就是要实现计数功能
页: [1]
查看完整版本: type_dict[‘文件夹’]+= 1 要达到什么目的?