lingedu 发表于 2020-6-14 17:06:29

python30讲课后习题统计文件类型

我编写完的代码,为啥不能显示文件夹的统计个数?
其他功能都正常

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 += 1
    print(fun)
    for i in fun.keys():
      print('该文件下共有类型为【%s】的文件%d个'%(i,fun))

all_file = os.listdir(r'C:\Users\Administrator\Desktop\测试文件夹')
change(all_file)      

我的文件夹统计个数显示成了【】2个,小甲鱼的是【‘文件夹’】2个
很疑惑,求解,显示结果如图

Twilight6 发表于 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)

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

lingedu 发表于 2020-6-14 17:21:09

我看他习题答案就是这么做的啊,那该怎么能显示出文件夹啊?

Twilight6 发表于 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 += 1
    for i in fun.keys():
      print('该文件下共有类型为【%s】的文件%d个'%(i,fun))
file_path = r'C:\Users\Administrator\Desktop\测试文件夹'
all_file = os.listdir(file_path)
change(all_file)

lingedu 发表于 2020-6-14 17:29:14

第5到7行不是统计文件夹的吗?后面不是统计扩展名吗,我感觉我第五到七行有问题呢?

Twilight6 发表于 2020-6-14 17:31:02

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

主要是isdir()方法判断的是路径 而不是文件~ 你可以去小甲鱼课后扩展看看~

Twilight6 发表于 2020-6-14 17:33:04

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

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

但是 用os.listdir 是列举文件名呀,遍历文件名 和路径扯不上关系呀

lingedu 发表于 2020-6-14 17:33:58

是路径他不就应该是一个文件夹吗,要么就是一个文件了?

Twilight6 发表于 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
页: [1]
查看完整版本: python30讲课后习题统计文件类型