鱼C论坛

 找回密码
 立即注册
查看: 965|回复: 20

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

[复制链接]
发表于 2020-5-19 11:34:03 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 我下何从 于 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)[1]
        type_dict.setdefault(ext,0)
        type_dict[ext]+=1
    print(type_dict)

for each_type in type_dict.keys():
    print("该文件夹下共有类型为【%s】的文件%d个"% (each_type, type_dict[each_type]))
print(type_dict)
最佳答案
2020-5-19 12:50:05
我下何从 发表于 2020-5-19 12:12
T哥这个肯定是对的,我复制了可行。但是主要是不理解那个if里代码为什么一定要用到呢?即使该目录里没有 ...
  1. import os

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

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

  5. for each_file in all_files:

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

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

  9. for each_type in type_dict.keys():
  10.     print('该文件夹下共有类型为【%s】的文件 %d 个' % (each_type, type_dict[each_type]))
复制代码

去掉了,运行完全正常,是你代码出了些差错你直接复制试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-19 11:37:21 | 显示全部楼层
那个if得判断是否是文件夹呀,不是文件夹才执行else
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-19 11:40:20 | 显示全部楼层
qiuyouzhi 发表于 2020-5-19 11:37
那个if得判断是否是文件夹呀,不是文件夹才执行else

我设置的工作目录里没有文件夹,这样去掉  if    好像也不行?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-19 11:42:36 | 显示全部楼层
我下何从 发表于 2020-5-19 11:40
我设置的工作目录里没有文件夹,这样去掉  if    好像也不行?


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-19 11:43:11 | 显示全部楼层
qiuyouzhi 发表于 2020-5-19 11:37
那个if得判断是否是文件夹呀,不是文件夹才执行else

好像不用 if 里面的代码就不能实现    而且if 里面判断的是目录哦?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

emmm,貌似是的
但是if肯定被触发过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 11:48:09 | 显示全部楼层
本帖最后由 Twilight6 于 2020-5-19 11:50 编辑
我下何从 发表于 2020-5-19 11:43
好像不用 if 里面的代码就不能实现    而且if 里面判断的是目录哦?


这样可用理解嘛?
  1. import os

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

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

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

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

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

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

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

  13. for each_type in type_dict.keys():
  14.     print('该文件夹下共有类型为【%s】的文件 %d 个' % (each_type, type_dict[each_type]))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-5-19 11:57:40 | 显示全部楼层
本帖最后由 我下何从 于 2020-5-19 11:58 编辑


我觉得目录是怎么定义的呢?如果单单是目录的话,那打开我的电脑后任意进盘都是目录,为啥还要判断呢?
而且即使这个目录里面没有文件夹,使用print(type_dict)放在else上面以及for(与它并列)下面的时候,还是打印出四个空字典
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

目录就是指文件夹
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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)[1]
        type_dict.setdefault(ext,0)
        type_dict[ext]+=1
    print(type_dict)

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


打印出了
{}
{}
{}
{}
按照T哥这样理解的话是这样吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-19 12:09:26 | 显示全部楼层
qiuyouzhi 发表于 2020-5-19 11:47
emmm,貌似是的
但是if肯定被触发过

对,但不知道为啥会触发到它,即使目录里没有文件夹也不能把它去掉,苦恼苦恼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 12:09:46 | 显示全部楼层

你把我代码复制 拿去运行试试结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-19 12:12:59 | 显示全部楼层
Twilight6 发表于 2020-5-19 12:09
你把我代码复制 拿去运行试试结果

T哥这个肯定是对的,我复制了可行。但是主要是不理解那个if里代码为什么一定要用到呢?即使该目录里没有文件夹。去掉就不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你把去掉后的完整报错信息 复制发来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 12:50:05 | 显示全部楼层    本楼为最佳答案   
我下何从 发表于 2020-5-19 12:12
T哥这个肯定是对的,我复制了可行。但是主要是不理解那个if里代码为什么一定要用到呢?即使该目录里没有 ...
  1. import os

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

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

  5. for each_file in all_files:

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

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

  9. for each_type in type_dict.keys():
  10.     print('该文件夹下共有类型为【%s】的文件 %d 个' % (each_type, type_dict[each_type]))
复制代码

去掉了,运行完全正常,是你代码出了些差错你直接复制试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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)[1]
        type_dict.setdefault(ext,0)
        type_dict[ext]+=1

for each_type in type_dict.keys():
    print("该文件夹下共有类型为【%s】的文件%d个"% (each_type, type_dict[each_type]))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 13:02:36 | 显示全部楼层
我下何从 发表于 2020-5-19 12:58
我试了一下
import os

isfile(path) 判断指定路径是否存在且是一个文件

你理解错了这个的意思了,这个的意思是判断单个文件的路径比如:
  1. os.path.isfile('C:\\text.txt')  # 这里返回True
  2. # 如果text文件存在,那么返回true,否则返回false
复制代码
  1. os.path.isfile('C:\\py') # 假设py为文件夹
  2. # 则返回False,因为他输入的路径是文件夹的路径,文件夹不算文件
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 13:04:32 | 显示全部楼层
我下何从 发表于 2020-5-19 12:58
我试了一下
import os

each_file 所有都是文件名,而不是一个完整的路径 所以肯定不会执行if 里面的代码块
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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的就不行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-19 13:05:58 | 显示全部楼层

谢谢T哥哈!辛苦了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-3 11:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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