質問: 特定のファイルを含むファイルシステムのサイズと空き容量を見つける linuxでpython 2.6を使用しています。最速の方法は何ですか: 特定のディレクトリまたはファイルが含まれているパーティションを特定するには? たとえば、/dev/sda2が/homeにマウントされ、/dev/mapper/fooが/home/fooにマウントされているとします。文字列"/home/foo/bar/baz"から、ペア("/dev/mapper/foo", "home/foo")を復元したいと思います。 そして、指定されたパーティションの使用統計を取得するには?たとえば、/dev/mapper/fooが与えられた場合、パーティションのサイズと使用可能な空き領域(バイト単位またはおよそメガバイト単位)を取得したいと思います。
回答: _import os def get_mount_point(pathname): "get the mount point of the filesystem containing pathname" pathname= os.path.normcase(os.path.realpath(pathname)) parent_device= path_device= os.stat(pathname).st_dev while parent_device == path_device: mount_point= pathname pathname= os.path.dirname(pathname) if pathname == mount_point: break parent_device= os.stat(pathname).st_dev return mount_point def get_mounted_device(pathname): "get the device mounted at pathname" # uses "/proc/mounts" pathname= os.path.normcase(pathname) # might be unnecessary here try: with open("/proc/mounts", "r") as ifp: for line in ifp: fields= line.rstrip('\n').split() # note that line above assumes that # no mount points contain whitespace if fields[1] == pathname: return fields[0] except environmenterror: pass return none # explicit def get_fs_freespace(pathname): "get the free space of the filesystem containing pathname" stat= os.statvfs(pathname) # use f_bfree for superuser, or f_bavail if filesystem # has reserved space for superuser return stat.f_bfree*stat.f_bsize _コンピューター上のいくつかのサンプルパス名:_path 'trash': mp /home /dev/sda4 free 6413754368 path 'smov': mp /mnt/s /dev/sde free 86761562112 path '/usr/local/lib': mp / rootfs free 2184364032 path '/proc/self/cmdline': mp /proc proc free 0 _pson python≥3.3)には、shutil.disk_usage(path)があり、_(total, used, free)_の名前付きタプルをバイト単位で返します。