鱼C论坛

 找回密码
 立即注册
查看: 922|回复: 4

[已解决]关于os、os.path模块的

[复制链接]
发表于 2020-2-7 14:43:25 | 显示全部楼层 |阅读模式

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

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

x
代码实现功能,统计指定文件夹内各类型文件数量
  1. import os

  2. director = input('请输入指定文件夹:')
  3. all_files = os.listdir(director)
  4. type_dict = dict()

  5. for each_file in all_files:
  6.     if os.path.isdir(each_file):
  7.         type_dict.setdefault('文件夹',0)
  8.         type_dict['文件夹'] += 1

  9.     else:
  10.         ext = os.path.splitext(each_file)[1]
  11.         type_dict.setdefault(ext,0)
  12.         type_dict[ext] += 1

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

实现方法有两种,第一种是直接使用os.listdir()列举指定目录中的文件
另外一种是,先使用os.chdir()更改工作目录到指定文件夹,然后在使用os.lostdir(os.curdir)列举当前文工作目录下的文件
即:

  1. import os

  2. director = input('请输入指定文件夹:')
  3. os.chdir(director)
  4. all_files = os.listdir(os.curdir)
  5. type_dict = dict()

  6. for each_file in all_files:
  7.     if os.path.isdir(each_file):
  8.         type_dict.setdefault('文件夹',0)
  9.         type_dict['文件夹'] += 1

  10.     else:
  11.         ext = os.path.splitext(each_file)[1]
  12.         type_dict.setdefault(ext,0)
  13.         type_dict[ext] += 1

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

两种方法都可以实现

但是类似的,计算指定文件夹下各文个文件的大小
  1. import os

  2. director = input('请输入指定文件:')
  3. os.chdir(director)
  4. all_files = os.listdir(os.curdir)
  5. file_dict = dict()

  6. for each_file in all_files:
  7.     if os.path.isfile(each_file):
  8.         file_size = os.path.getsize(each_file)
  9.         file_dict[each_file] = file_size

  10. for each in file_dict.items():
  11.     print('%s[%dBytes]'%(each[0],each[1]))

复制代码

却只能以第二种方法实现,也就是先更改工作目录到指定文件夹,在列举当前工作目录下的文件
第一种直接的方法无法实现了??
下面的代码无法实现

  1. import os

  2. director = input('请输入指定文件:')
  3. all_files = os.listdir(director)
  4. file_dict = dict()

  5. for each_file in all_files:
  6.     if os.path.isfile(each_file):
  7.         file_size = os.path.getsize(each_file)
  8.         file_dict[each_file] = file_size

  9. for each in file_dict.items():
  10.     print('%s[%dBytes]'%(each[0],each[1]))

复制代码


为什么??求大佬指点
最佳答案
2020-2-7 14:49:13
相关代码 isfile getsize 等请指定完整文件路径
  1. import os

  2. director = input('请输入指定文件夹:')
  3. all_files = os.listdir(director)
  4. file_dict = dict()

  5. for each_file in all_files:
  6.     full = os.path.join(director, each_file)
  7.     #print(full)
  8.     if os.path.isfile(full):
  9.         file_size = os.path.getsize(full)
  10.         file_dict[each_file] = file_size

  11. for each in file_dict.items():
  12.     print('%s[%dBytes]'%(each[0],each[1]))

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-7 14:49:13 | 显示全部楼层    本楼为最佳答案   
相关代码 isfile getsize 等请指定完整文件路径
  1. import os

  2. director = input('请输入指定文件夹:')
  3. all_files = os.listdir(director)
  4. file_dict = dict()

  5. for each_file in all_files:
  6.     full = os.path.join(director, each_file)
  7.     #print(full)
  8.     if os.path.isfile(full):
  9.         file_size = os.path.getsize(full)
  10.         file_dict[each_file] = file_size

  11. for each in file_dict.items():
  12.     print('%s[%dBytes]'%(each[0],each[1]))

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

使用道具 举报

 楼主| 发表于 2020-2-7 15:02:18 | 显示全部楼层
hrp 发表于 2020-2-7 14:49
相关代码 isfile getsize 等请指定完整文件路径

你把下面的代码都改了啊,我说的两种方法的,只是改了os.listdir()的参数,而整个os.listdir()又是用变量all_files代替了的,按理说下面的代码不用改动也可以实现啊,就像第一个例子那样,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-7 15:10:15 | 显示全部楼层
本帖最后由 hrp 于 2020-2-7 15:45 编辑
像风 发表于 2020-2-7 15:02
你把下面的代码都改了啊,我说的两种方法的,只是改了os.listdir()的参数,而整个os.listdir()又是用 ...


第一段代码结果也不对呀,isdir根本不能正常判断,无论是不是文件夹全部都执行else分支。
总之,如果不切换当前目录,就要指定完整文件路径。

解释明白点吧,默认当前目录是脚本运行所在目录,os.chdir是切换当前目录,os.curdir是当前目录。比如你给isfile或者isdir的参数,isfile(eachfile)参数eachfile不是完整路径,它会尝试把参数自动补全成 isfile("当前目录\eachfile") 的形式再进行判断。在没有切换当前目录为用户输入路径的情况下,这个补全出来的路径是(脚本运行目录+eachfile)当然是很可能不存在的,无法正常判断。如果切换了当前目录,那它自动补全的 "当前目录\eachfile" 这个路径是(用户输入路径+eachfile)就是正确的,就可以正常判断。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-7 15:45:55 | 显示全部楼层
hrp 发表于 2020-2-7 15:10
第一段代码结果也不对呀,isdir根本不能正常判断,无论是不是文件夹全部都执行else分支。
总之,如果 ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-1 17:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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