对比os模块的函数和shutil模块中包含的函数,会发现它们有一些重复。那么为何会存在两个模块提供相同功能的状况呢?这就涉及到了标准库模块的定位问题了。os模块是对操做系统的接口进行封装,主要做用是跨平台,shutil模块包含复制、移动、重命名、删除文件目录以及压缩包的函数,主要做用是管理文件和目录,所以它们并不冲突,而且是互补的关系,对于常见的文件操做,shutil更易于使用。在shutil里面没有提供相应功能的状况下再使用os模块下的函数。ide
博文大纲:函数
- 一、复制文件
- 二、复制目录
- 三、移动目录或文件(重命名)
- 四、删除目录
- 五、更改属主及属组
- 六、查找命令绝对路径
- 七、获取磁盘使用空间
- 八、归档和解包
shutil.copy('src','dst')
shutil.copytree('src','dst')
shutil.move('src','dst')
shutil.rmtree('path')
shutil.chown('path','user','group')
shutil.which('cmd')
total, used, free = shutil.disk_usage("path") print("当前磁盘共: %iGB, 已使用: %iGB, 剩余: %iGB"%(total / 1073741824, used / 1073741824, free / 1073741824))
注:默认单位是字节,因此转换为了GB,公式以下:
1KB= 1024字节,1MB= 1024KB,1GB= 1024MB; 因此:1G=1073741824字节。也就是上面为何要除以1073741824操作系统
shutil.get_unpack_formats()
shutil.get_archive_formats()
shutil.make_archive('test','gztar','./') #将当前目录下全部文件打包为test.tar.gz
参数解释以下(从左往右开始):code
- base_name: 压缩包的文件名,也能够是压缩包的路径。只是文件名时,则保存至当前目录,不然保存至指定路径。 如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/
- gztar: 压缩包种类,可选值有:“zip”, “tar”, “bztar”,“gztar”
- ./: 要压缩的文件夹路径(默认当前目录)
shutil.unpack_archive(filename,extract_dir=None,format=None) # 栗子: shutil.unpack_archive('test.tar.gz','/opt/tlv')
- filename:文件路径;
- extract_dir:解压至的文件夹路径。文件夹能够不存在,会自动生成;
- format:解压格式,默认为None,会根据扩展名自动选择解压格式。