我正在创build一个实用程序,它将遍历目录并获取所有目录的子目录和文件的大小并存储值。 但是,大小不正确计算。
这是我的课程,通过所有的子目录自动recursion:
class directory: ''' Class that automatically traverses directories and builds a tree with size info ''' def __init__(self,path,parent=None): if path[-1] != '/': # Add trailing / self.path = path + '/' else: self.path = path self.size = 4096 self.parent = parent self.children = [] self.errors = [] for i in os.listdir(self.path): try: self.size += os.lstat(self.path + i).st_size if os.path.isdir(self.path + i) and not os.path.islink(self.path + i): a = directory(self.path + i,self) self.size += a.size self.children.append(a) except OSError: self.errors.append(path + i)
a =目录('/ var / media / television / The Wire')
被阻止的系统调用不会让SIGKILL终止进程
如何重命名()没有竞争条件?
我如何(成功)从命令行openSSL解码编码的密码?
正确使用LD_LIBRARY_PATH或ldconfig作为软件包
a.size
45289964053
但是,当我尝试杜,我得到
〜#du -sx / var / media / television / The Wire
44228824
目录不包含任何链接或任何特殊的东西。
有人可以解释为什么os.stat()给出奇怪的大小读数?
平台:Linux(Fedora 13)Python 2.7
谢谢,
| 在一行的开始 – bash
如何启动与gui没有监视器的Linux?
创build一个类似wacom的Linuxinput设备,用于使用触摸屏和笔
考虑这个文件foo
-rw-rw-r-- 1 unutbu unutbu 25334 2010-10-31 12:55 foo
它由25334个字节组成。
tune2fs告诉我foo驻留在一个块大小为4096字节的文件系统上:
% sudo tune2fs -l /dev/mapper/vg1-OS1 ... Block size: 4096 ...
因此,文件系统上的最小文件将占用4096字节,即使其内容仅由1个字节组成。 随着文件变大,空间被分配在4096字节块中。
杜报告
% du -B1 foo 28672 foo
请注意,28672/4096 = 7。这就是说,foo在文件系统上占用了7个4096字节的块。 这是保存25334字节所需的最小块数。
% du foo 28 foo
du这个版本只是报告28672/1024向下舍去。
du在默认情况下在磁盘上给出了大小,而在st_size给出了实际的文件大小。
$ du test.txt 8 test.txt $ du -b test.txt 6095 test.txt >>> os.stat('test.txt').st_size 6095
我会写这个代码为:
import os,os.path def size_dir(d): file_walker = ( os.path.join(root,f) for root,_,files in os.walk(d) for f in files ) return sum(os.path.getsize(f) for f in file_walker)
如果你想要将目录统计为4k,那么请执行如下操作:
import os,files in os.walk(d) for f in files ) dir_walker = ( 4096 for root,dirs,_ in os.walk(d) for d in dirs ) return 4096 + sum(os.path.getsize(f) for f in file_walker) + sum(size for size in dir_walker)
在Linux上(我正在使用CentOS),'du -b'将以字节为单位返回,并将激活–apparent-size,从而返回文件的大小,而不是磁盘空间的大小。 试试看看是否与Python os.stat所说的一致。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。