鱼C论坛

 找回密码
 立即注册
查看: 2223|回复: 11

[已解决]Python文件访问大小统计遇到的问题

[复制链接]
发表于 2018-2-1 21:48:28 | 显示全部楼层 |阅读模式

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

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

x
晚上用os和os.path模块写了个统计目录下文件大小的小程序,结果访问E盘时出现错误:
  1. 请输入目录:E://
  2. Traceback (most recent call last):
  3.   File "E:/Python/文件大小统计.py", line 13, in <module>
  4.     file_size(file_contents) if os.path.exists(file_contents) else print('目录错误!')
  5.   File "E:/Python/文件大小统计.py", line 8, in file_size
  6.     print('{a} 【{b}Bytes】'.format(a=each, b=os.path.getsize(each)))
  7.   File "C:\Users\yg\AppData\Local\Programs\Python\Python36\lib\genericpath.py", line 50, in getsize
  8.     return os.stat(filename).st_size
  9. FileNotFoundError: [WinError 2] 系统找不到指定的文件。: '$RECYCLE.BIN'

  10. Process finished with exit code 1
复制代码


代码如下:
  1. import os
  2. import os.path


  3. def file_size(contents):
  4.     file_list = os.listdir(contents)
  5.     for each in file_list:
  6.         print('{a} 【{b}Bytes】'.format(a=each, b=os.path.getsize(each)))


  7. while True:
  8.     file_contents = input('请输入目录:')
  9.     file_size(file_contents) if os.path.exists(file_contents) else print('目录错误!')
复制代码
最佳答案
2018-2-2 11:44:43
如果你想查询任意路径下的文件大小,就得改变路径去你要查询的地方,一般情况下,子文件夹下面的程序是无法访问父文件夹目录的。我给你添加了修改路径的函数,现在可以随意访问有权限的路径了。

import os
import os.path


def file_size(contents):
        file_list = os.listdir(contents)
        for each in file_list:
                print('{a} 【{b}Bytes】'.format(a=each, b=os.path.getsize(each)))


while True:
        file_contents = input('请输入目录:')
        if os.path.isdir(file_contents):
                os.chdir(file_contents)
        file_size(file_contents) if os.path.exists(file_contents) else print('目录错误!')
       
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-2-1 21:53:25 | 显示全部楼层
目录别敲根目录,那是回收站文件,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-1 21:59:08 | 显示全部楼层
塔利班 发表于 2018-2-1 21:53
目录别敲根目录,那是回收站文件,

那个不能统计吗?我知道是回收站系统文件! 右键属性能看大小问什么不能访问?  
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-1 22:12:18 | 显示全部楼层
太阳花田 发表于 2018-2-1 21:59
那个不能统计吗?我知道是回收站系统文件! 右键属性能看大小问什么不能访问?

这是受保护的文件,不要随便动最好,用于恢复文件的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-1 22:28:11 | 显示全部楼层
塔利班 发表于 2018-2-1 22:12
这是受保护的文件,不要随便动最好,用于恢复文件的

我就统计个大小,我自己操作能打开看大小(即我自己能访问)  这个函数为什么不行。
就跟爬虫我能浏览器访问,爬虫就一定能有方法能爬到。
能从内部机制的实现说说这个异常出现的原因不?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-2 00:02:18 | 显示全部楼层
上面代码运行本身有问题,我修改了一下,用这个试试:
  1. import os
  2. import os.path


  3. def file_size(contents):
  4.     file_list = os.listdir(contents)
  5.     for each in file_list:
  6.         #print('dir is:' + each)
  7.         if os.path.isdir(contents+'\\'+each) is True:
  8.             file_size(contents+'\\'+each)
  9.         else:
  10.             print('【{b} Bytes】{a} '.format(a=contents+'\\'+each, b=os.path.getsize(contents+'\\'+each)))


  11. while True:
  12.     file_contents = input('请输入目录 或 quit退出\n')
  13.     if file_contents == 'quit':
  14.         print('退出程序')
  15.         break
  16.     file_size(file_contents) if os.path.exists(file_contents) else print('目录错误!')
  17.    
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-2 09:45:20 | 显示全部楼层
maxyang2008 发表于 2018-2-2 00:02
上面代码运行本身有问题,我修改了一下,用这个试试:

你这个是访问最下一层文件,我只需要当前层   而且还有这个错误:
  1. Traceback (most recent call last):
  2.   File "E:/Python/新建文本文档 (2).py", line 20, in <module>
  3.     file_size(file_contents) if os.path.exists(file_contents) else print('目录错误!')
  4.   File "E:/Python/新建文本文档 (2).py", line 10, in file_size
  5.     file_size(contents + '\\' + each)
  6.   File "E:/Python/新建文本文档 (2).py", line 6, in file_size
  7.     file_list = os.listdir(contents)
  8. PermissionError: [WinError 5] 拒绝访问。: 'E://\\System Volume Information'
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-2 11:04:23 | 显示全部楼层
太阳花田 发表于 2018-2-2 09:45
你这个是访问最下一层文件,我只需要当前层   而且还有这个错误:

你这是从E盘根目录开始查看的?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-2 11:05:23 | 显示全部楼层
maxyang2008 发表于 2018-2-2 11:04
你这是从E盘根目录开始查看的?

恩 E://
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-2 11:44:43 | 显示全部楼层    本楼为最佳答案   
如果你想查询任意路径下的文件大小,就得改变路径去你要查询的地方,一般情况下,子文件夹下面的程序是无法访问父文件夹目录的。我给你添加了修改路径的函数,现在可以随意访问有权限的路径了。

import os
import os.path


def file_size(contents):
        file_list = os.listdir(contents)
        for each in file_list:
                print('{a} 【{b}Bytes】'.format(a=each, b=os.path.getsize(each)))


while True:
        file_contents = input('请输入目录:')
        if os.path.isdir(file_contents):
                os.chdir(file_contents)
        file_size(file_contents) if os.path.exists(file_contents) else print('目录错误!')
       
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-2 12:24:55 | 显示全部楼层
梦道 发表于 2018-2-2 11:44
如果你想查询任意路径下的文件大小,就得改变路径去你要查询的地方,一般情况下,子文件夹下面的程序是无法 ...

确实,我把程序放到E盘根目录再运行就可以了了  谢了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-2 12:29:54 | 显示全部楼层

直接从E://的一个子目录开始,试下你的代码是不是还报错。
可以用来排除是代码的问题,还是E://\\System Volume Information目录权限的问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-6 20:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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