鱼C论坛

 找回密码
 立即注册
查看: 1095|回复: 8

[已解决]python30讲课后习题统计文件类型

[复制链接]
发表于 2020-6-14 17:06:29 | 显示全部楼层 |阅读模式

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

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

x
我编写完的代码,为啥不能显示文件夹的统计个数?
其他功能都正常
import os
def change(all_file):
    fun = {}                       #用字典其值可以直接存储数量,因而用字典
    for each in all_file:
        if os.path.isdir(each):    #指定路径是一个目录,证明是个文件夹
            fun.setdefault('文件夹',0)
            fun['文件夹'] +=1
        else:
            (name,exp) = os.path.splitext(each)
            fun.setdefault(exp,0)
            fun[exp] += 1
    print(fun)
    for i in fun.keys():
        print('该文件下共有类型为【%s】的文件%d个'%(i,fun[i]))

all_file = os.listdir(r'C:\Users\Administrator\Desktop\测试文件夹')
change(all_file)        
我的文件夹统计个数显示成了【】2个,小甲鱼的是【‘文件夹’】2个
很疑惑,求解,显示结果如图
最佳答案
2020-6-14 17:09:10
本帖最后由 Twilight6 于 2020-6-14 17:11 编辑


你上面的 if 判断的是文件 而不是目录路径

导致就算是文件夹也是执行else  而不是 if
(name,exp) = os.path.splitext(each)


这边的切割对文件夹无效,所以你

fun.setdefault(exp,0)

会弄个空字符串的键到字典中去

这是小甲鱼的 显示

这是小甲鱼的 显示

这是我的显示

这是我的显示
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-14 17:09:10 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-6-14 17:11 编辑


你上面的 if 判断的是文件 而不是目录路径

导致就算是文件夹也是执行else  而不是 if
(name,exp) = os.path.splitext(each)


这边的切割对文件夹无效,所以你

fun.setdefault(exp,0)

会弄个空字符串的键到字典中去
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-14 17:21:09 From FishC Mobile | 显示全部楼层
我看他习题答案就是这么做的啊,那该怎么能显示出文件夹啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-14 17:24:58 | 显示全部楼层
lingedu 发表于 2020-6-14 17:21
我看他习题答案就是这么做的啊,那该怎么能显示出文件夹啊?




改成这样你在试试:
import os
def change(all_file):
    fun = {}                       #用字典其值可以直接存储数量,因而用字典
    for each in all_file:
        if os.path.isdir(file_path+os.sep+each):    #指定路径是一个目录,证明是个文件夹
            fun.setdefault('文件夹',0)
            fun['文件夹'] +=1
        else:
            (name,exp) = os.path.splitext(each)
            fun.setdefault(exp,0)
            fun[exp] += 1
    for i in fun.keys():
        print('该文件下共有类型为【%s】的文件%d个'%(i,fun[i]))
file_path = r'C:\Users\Administrator\Desktop\测试文件夹'
all_file = os.listdir(file_path)
change(all_file)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-14 17:29:14 From FishC Mobile | 显示全部楼层
第5到7行不是统计文件夹的吗?后面不是统计扩展名吗,我感觉我第五到七行有问题呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-14 17:31:02 | 显示全部楼层
lingedu 发表于 2020-6-14 17:29
第5到7行不是统计文件夹的吗?后面不是统计扩展名吗,我感觉我第五到七行有问题呢?

主要是  isdir()  方法判断的是路径 而不是文件~ 你可以去小甲鱼课后扩展看看~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-14 17:33:04 | 显示全部楼层
lingedu 发表于 2020-6-14 17:29
第5到7行不是统计文件夹的吗?后面不是统计扩展名吗,我感觉我第五到七行有问题呢?

我觉得好像确实是小甲鱼代码问题哈哈  他代码第五行备注自己写的判断路径

但是 用os.listdir 是列举文件名呀,遍历文件名 和路径扯不上关系呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-14 17:33:58 From FishC Mobile | 显示全部楼层
是路径他不就应该是一个文件夹吗,要么就是一个文件了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-14 17:39:16 | 显示全部楼层
本帖最后由 Twilight6 于 2020-6-14 17:40 编辑
lingedu 发表于 2020-6-14 17:33
是路径他不就应该是一个文件夹吗,要么就是一个文件了?


是的   路径可以是文件夹路径 和文件路径

但是 os.listdir 列举的是文件夹 不带路径  所以 os.path.isdir(path) 返回的都是 False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 17:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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