鱼C论坛

 找回密码
 立即注册
查看: 1130|回复: 7

[已解决]第030讲:文件系统:介绍一个高大上的东西课后作业第0题

[复制链接]
发表于 2018-9-7 21:21:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 stone1005 于 2018-9-7 21:26 编辑

编写一个程序,统计当前目录下每个文件类型的文件数,程序实现如图:
20150412091711629.png
答题如下:
  1. import os
  2. all_files = os.listdir('C:\\')
  3. type_dict = dict()
  4. for each_file in all_files:
  5.     (name, type1) = os.path.splitext(each_file)
  6.     if type1 == '':
  7.         type1 = '文件夹'
  8.     if type1 not in type_dict:
  9.         type_dict[type1] = 1
  10.     else:
  11.         type_dict[type1] += 1
  12. for each in type_dict:
  13.     print('该文件夹下共有类型为【%s】的文件%d个' %(each, type_dict[each]))
复制代码

结果很成功,如下:
  1. 该文件夹下共有类型为【文件夹】的文件29个
  2. 该文件夹下共有类型为【.Bin】的文件1个
  3. 该文件夹下共有类型为【.emf】的文件1个
  4. 该文件夹下共有类型为【.BAK】的文件1个
  5. 该文件夹下共有类型为【.Msi】的文件1个
  6. 该文件夹下共有类型为【.dll】的文件2个
  7. 该文件夹下共有类型为【.cab】的文件1个
  8. 该文件夹下共有类型为【.cat】的文件2个
  9. 该文件夹下共有类型为【.VER】的文件1个
  10. 该文件夹下共有类型为【.log】的文件3个
  11. 该文件夹下共有类型为【.INF】的文件1个
  12. 该文件夹下共有类型为【.txt】的文件3个
  13. 该文件夹下共有类型为【.ini】的文件2个
  14. 该文件夹下共有类型为【.img】的文件3个
  15. 该文件夹下共有类型为【.sys】的文件1个
  16. 该文件夹下共有类型为【.exe】的文件2个
复制代码


后参考小甲鱼答案重新码了一遍代码如下:
  1. import os
  2. lines = os.listdir('C:\\')
  3. type_dict = dict()
  4. for line in lines:
  5.     if os.path.isdir(line):
  6.         type_dict.setdefault('文件夹', 0)
  7.         type_dict['文件夹'] += 1
  8.     else:
  9.         ext = os.path.splitext(line)[1]
  10.         type_dict.setdefault(ext, 0)
  11.         type_dict[ext] += 1
  12. for each in type_dict.keys():
  13.     print('该文件夹下共有类型为【%s】的文件%d个' %(each, type_dict[each]))
复制代码

执行后如下:
  1. 该文件夹下共有类型为【】的文件29个
  2. 该文件夹下共有类型为【.Bin】的文件1个
  3. 该文件夹下共有类型为【.emf】的文件1个
  4. 该文件夹下共有类型为【.BAK】的文件1个
  5. 该文件夹下共有类型为【.Msi】的文件1个
  6. 该文件夹下共有类型为【.dll】的文件2个
  7. 该文件夹下共有类型为【.cab】的文件1个
  8. 该文件夹下共有类型为【.cat】的文件2个
  9. 该文件夹下共有类型为【.VER】的文件1个
  10. 该文件夹下共有类型为【.log】的文件3个
  11. 该文件夹下共有类型为【.INF】的文件1个
  12. 该文件夹下共有类型为【.txt】的文件3个
  13. 该文件夹下共有类型为【.ini】的文件2个
  14. 该文件夹下共有类型为【.img】的文件3个
  15. 该文件夹下共有类型为【.sys】的文件1个
  16. 该文件夹下共有类型为【.exe】的文件2个
复制代码


天哪,文件夹竟然不能被统计出来,求大神解惑!!!
最佳答案
2018-9-7 21:29:27
后边你得os.chdir()到那个目录
不然不识别
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-9-7 21:24:38 | 显示全部楼层
题目图片丢失了,现补上
20150412091711629.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-7 21:26:50 | 显示全部楼层
  1. for each in dict
复制代码

默认遍历的是字典标签
  1. for each in dict.keys():
复制代码

遍历的是字典键

点评

然后文件夹没有后缀名,所以就是空  发表于 2018-9-7 21:27
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-7 21:29:27 | 显示全部楼层    本楼为最佳答案   
后边你得os.chdir()到那个目录
不然不识别
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-7 21:52:25 | 显示全部楼层
本帖最后由 stone1005 于 2018-9-7 21:58 编辑
塔利班 发表于 2018-9-7 21:29
后边你得os.chdir()到那个目录
不然不识别


按照你的方法成功了,但是为什么呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-7 21:59:56 | 显示全部楼层

你不在那个文件夹,listdir得到的路径不全,不是当前目录的话识别不出来是个文件夹
比如你的py文件是在D:\,而目标是C:\,C盘下有个text目录,那listdir后,
列表里只有个‘text’字符串,而不是c:\\text
你的D盘没有这个目录,所以不认识
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-7 22:51:20 | 显示全部楼层
塔利班 发表于 2018-9-7 21:59
你不在那个文件夹,listdir得到的路径不全,不是当前目录的话识别不出来是个文件夹
比如你的py文件是在D ...

欧了,非常感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-28 04:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表