我下何从 发表于 2020-5-19 11:34:03

30讲,动动手d0题,小白笨b,大神求解答

本帖最后由 我下何从 于 2020-5-19 11:41 编辑

import os


all_files=os.listdir('E:\ALLworkinstalltion\python\pythonzouye\homework\o10')
type_dict=dict()

for each_file in all_files:
    if os.path.isdir(each_file):
      type_dict.setdefault('文件夹',0)
      type_dict["文件夹"]=type_dict["文件夹"]+1                      #这个判断是否是目录是什么意思呢?不写下面的代码的话,直接打印这里是个空字典,想了好久,小白较笨,望大神解疑
                                                                                              不是只需要判断是啥文件不就可以了吗?那直接就用else里的代码不就ok了吗,可这样出来的还是个空字典
   
    else:
      ext=os.path.splitext(each_file)
      type_dict.setdefault(ext,0)
      type_dict+=1
    print(type_dict)

for each_type in type_dict.keys():
    print("该文件夹下共有类型为【%s】的文件%d个"% (each_type, type_dict))
print(type_dict)

qiuyouzhi 发表于 2020-5-19 11:37:21

那个if得判断是否是文件夹呀,不是文件夹才执行else

我下何从 发表于 2020-5-19 11:40:20

qiuyouzhi 发表于 2020-5-19 11:37
那个if得判断是否是文件夹呀,不是文件夹才执行else

我设置的工作目录里没有文件夹,这样去掉if    好像也不行?{:5_99:}

我下何从 发表于 2020-5-19 11:42:36

我下何从 发表于 2020-5-19 11:40
我设置的工作目录里没有文件夹,这样去掉if    好像也不行?

我下何从 发表于 2020-5-19 11:43:11

qiuyouzhi 发表于 2020-5-19 11:37
那个if得判断是否是文件夹呀,不是文件夹才执行else

好像不用 if 里面的代码就不能实现    而且if 里面判断的是目录哦?

qiuyouzhi 发表于 2020-5-19 11:47:08

我下何从 发表于 2020-5-19 11:43
好像不用 if 里面的代码就不能实现    而且if 里面判断的是目录哦?

emmm,貌似是的
但是if肯定被触发过

Twilight6 发表于 2020-5-19 11:48:09

本帖最后由 Twilight6 于 2020-5-19 11:50 编辑

我下何从 发表于 2020-5-19 11:43
好像不用 if 里面的代码就不能实现    而且if 里面判断的是目录哦?

这样可用理解嘛?
import os

all_files = os.listdir(os.curdir) # 使用os.curdir表示当前目录更标准
type_dict = dict() # 初始化一个空字典

for each_file in all_files:
    if os.path.isdir(each_file):# 这边是先判断指定路径是否存在且是一个目录

      type_dict.setdefault('文件夹', 0)# 如果是目录在执行这里的代码块

      # setdefault 方法是如果字典中包含有给定键,则返回该键对应的值,否则返回为该键设置的值。用于统计文件夹数量

      type_dict['文件夹'] += 1# 每次查找到一个目录 数量就 +1 用于统计文件夹个数
    else:# 反正不是文件夹,执行else 既遍历到的是文件不是文件夹

      ext = os.path.splitext(each_file) # 分离文件扩展名

      type_dict.setdefault(ext, 0) # 同if内含义
      type_dict += 1 # 每次查相同类型的文件 数量就 +1 用于统计相同类型的文件个数

for each_type in type_dict.keys():
    print('该文件夹下共有类型为【%s】的文件 %d 个' % (each_type, type_dict))

我下何从 发表于 2020-5-19 11:57:40

本帖最后由 我下何从 于 2020-5-19 11:58 编辑

Twilight6 发表于 2020-5-19 11:48
这样可用理解嘛?

我觉得目录是怎么定义的呢?如果单单是目录的话,那打开我的电脑后任意进盘都是目录,为啥还要判断呢?
而且即使这个目录里面没有文件夹,使用print(type_dict)放在else上面以及for(与它并列)下面的时候,还是打印出四个空字典

Twilight6 发表于 2020-5-19 11:59:24

我下何从 发表于 2020-5-19 11:57
我觉得目录是怎么定义的呢?如果单单是目录的话,那打开我的电脑后任意进盘都是目录,为啥还要判断呢? ...

目录就是指文件夹

我下何从 发表于 2020-5-19 12:07:53

Twilight6 发表于 2020-5-19 11:59
目录就是指文件夹

import os


all_files=os.listdir('E:\ALLworkinstalltion\python\pythonzouye\homework\o10')    #这个目录里没有文件夹,只有文件
type_dict=dict()

for each_file in all_files:
    #if os.path.isdir(each_file):
      #type_dict.setdefault('文件夹',0)
      #type_dict["文件夹"]=type_dict["文件夹"]+1          #去除红字if找寻统计文件夹的代码
   
    #else:
    if os.path.isfile(each_file):
      ext=os.path.splitext(each_file)
      type_dict.setdefault(ext,0)
      type_dict+=1
    print(type_dict)

for each_type in type_dict.keys():
    print("该文件夹下共有类型为【%s】的文件%d个"% (each_type, type_dict))
print(type_dict)


打印出了
{}
{}
{}
{}
按照T哥这样理解的话是这样吗?

我下何从 发表于 2020-5-19 12:09:26

qiuyouzhi 发表于 2020-5-19 11:47
emmm,貌似是的
但是if肯定被触发过

对,但不知道为啥会触发到它,即使目录里没有文件夹也不能把它去掉,苦恼苦恼

Twilight6 发表于 2020-5-19 12:09:46

我下何从 发表于 2020-5-19 12:07
import os




你把我代码复制 拿去运行试试结果

我下何从 发表于 2020-5-19 12:12:59

Twilight6 发表于 2020-5-19 12:09
你把我代码复制 拿去运行试试结果

T哥这个肯定是对的,我复制了可行。但是主要是不理解那个if里代码为什么一定要用到呢?即使该目录里没有文件夹。去掉就不行

Twilight6 发表于 2020-5-19 12:46:24

我下何从 发表于 2020-5-19 12:12
T哥这个肯定是对的,我复制了可行。但是主要是不理解那个if里代码为什么一定要用到呢?即使该目录里没有 ...

你把去掉后的完整报错信息 复制发来看看

Twilight6 发表于 2020-5-19 12:50:05

我下何从 发表于 2020-5-19 12:12
T哥这个肯定是对的,我复制了可行。但是主要是不理解那个if里代码为什么一定要用到呢?即使该目录里没有 ...

import os

os.chdir('C:\\py')

all_files = os.listdir(os.curdir) # 使用os.curdir表示当前目录更标准
type_dict = dict() # 初始化一个空字典

for each_file in all_files:

    ext = os.path.splitext(each_file) # 分离文件扩展名

    type_dict.setdefault(ext, 0) # 同if内含义
    type_dict += 1 # 每次查相同类型的文件 数量就 +1 用于统计相同类型的文件个数

for each_type in type_dict.keys():
    print('该文件夹下共有类型为【%s】的文件 %d 个' % (each_type, type_dict))
去掉了,运行完全正常,是你代码出了些差错你直接复制试试

我下何从 发表于 2020-5-19 12:58:55

Twilight6 发表于 2020-5-19 12:50
去掉了,运行完全正常,是你代码出了些差错你直接复制试试

我试了一下
import os


all_files=os.listdir('E:\ALLworkinstalltion\python\pythonzouye\homework\o10')
type_dict=dict()

for each_file in all_files:
    if os.path.isfile(each_file):            #这行去掉就正常,这行不去就不正常,这里进行判断有问题吗?打扰T哥的休息时间了
      ext=os.path.splitext(each_file)
      type_dict.setdefault(ext,0)
      type_dict+=1

for each_type in type_dict.keys():
    print("该文件夹下共有类型为【%s】的文件%d个"% (each_type, type_dict))

Twilight6 发表于 2020-5-19 13:02:36

我下何从 发表于 2020-5-19 12:58
我试了一下
import os



isfile(path) 判断指定路径是否存在且是一个文件
你理解错了这个的意思了,这个的意思是判断单个文件的路径比如:
os.path.isfile('C:\\text.txt')# 这里返回True
# 如果text文件存在,那么返回true,否则返回false
os.path.isfile('C:\\py') # 假设py为文件夹
# 则返回False,因为他输入的路径是文件夹的路径,文件夹不算文件

Twilight6 发表于 2020-5-19 13:04:32

我下何从 发表于 2020-5-19 12:58
我试了一下
import os



each_file 所有都是文件名,而不是一个完整的路径 所以肯定不会执行if 里面的代码块

我下何从 发表于 2020-5-19 13:04:48

Twilight6 发表于 2020-5-19 12:50
去掉了,运行完全正常,是你代码出了些差错你直接复制试试

import os

1
os.chdir('C:\\py')

all_files = os.listdir(os.curdir) # 使用os.curdir表示当前目录更标准
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
2
all_files=os.listdir('E:\ALLworkinstalltion\python\pythonzouye\homework\o10')



T哥,这个是关键啊!!!!
1的话都行
2的就不行了

我下何从 发表于 2020-5-19 13:05:58

我下何从 发表于 2020-5-19 13:04
import os

1


谢谢T哥哈!辛苦了!
页: [1] 2
查看完整版本: 30讲,动动手d0题,小白笨b,大神求解答