马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
问题来自今天上小甲鱼老师30课程的第一题动动手:
我自己写的代码:
- from os import*
- all_files=listdir('G:\\030文件系统')
- temp_dict=dict()
- for i in all_files:
- if path.splitext(i)[1] not in temp_dict:
- if path.splitext(i)[1]=='':
- temp_dict['文件夹']=1
- else:
- temp_dict[path.splitext(i)[1]]=1
- else:
- if path.splitext(i)[1]=='':
- temp_dict['文件夹']+=1
- else:
- temp_dict[path.splitext(i)[1]]+=1
- for i in temp_dict.keys():
- print('该文件下共有类型为【{}】的文件{}个'.format(i,temp_dict[i]))
复制代码 执行结果:
文件夹里具体文件如下:
功能看似实现,但是问题存在,就是文件数量一直是1,而实际文件夹中的文件夹有3个,经过自己分析,问题出在:
- if path.splitext(i)[1]=='':
- temp_dict['文件夹']=1
复制代码 这个判断上因为每当遍历循环到文件夹它所分割出的扩展名是'',所以一直在循环temp_dict['文件夹']=1,这是导致文件一直是1的原因。
然后我就思考如何解决此问题,我第一个想到的就是在创建字典的时候就直接加上文件夹:
更改后的代码如下:
- from os import*
- all_files=listdir('G:\\030文件系统')
- temp_dict={'文件夹':0}
- for i in all_files:
- if path.splitext(i)[1] not in temp_dict:
- if path.splitext(i)[1]=='':
- temp_dict['文件夹']+=1
- else:
- temp_dict[path.splitext(i)[1]]=1
- else:
- temp_dict[path.splitext(i)[1]]+=1
- for i in temp_dict.keys():
- print('该文件下共有类型为【{}】的文件{}个'.format(i,temp_dict[i]))
复制代码 执行结果:
成功了!文件夹数量正确!
实现后我特别想知道小甲鱼老师所以去看了一下老师的代码,发现原理和我差不多但是我还是觉得自己的比较好理解可能是自己写的原因,但老师用到了随后我对我的代码进行了修改:
- from os import*
- all_files=listdir('G:\\030文件系统')
- temp_dict=dict()
- for i in all_files:
- if path.splitext(i)[1] not in temp_dict:
- if path.splitext(i)[1]=='':
- temp_dict.setdefault('文件夹',0)
- temp_dict['文件夹']+=1
- else:
- temp_dict[path.splitext(i)[1]]=1
- else:
- temp_dict[path.splitext(i)[1]]+=1
- for i in temp_dict.keys():
- print('该文件下共有类型为【{}】的文件{}个'.format(i,temp_dict[i]))
复制代码
功能也实现了,但是我不知道[b]setdefault这个代码的实际作用是什么?是建立一个项吗?如果只是建立一个项的话为何我将[/b][b][b]temp_dict.setdefault('文件夹',0)代码改成:
文件夹数量又只是1个了!
然后我去查了资料:
[/b][/b]
[b][b][b]setdefault(键,值): [/b][/b][/b][b]和get相似,但是他会自动添加未找到的键但还不是很懂,有没有大神解释一下[b][b][b]setdefault,万分感谢![/b][/b][/b]
[/b]
|