重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
今天就跟大家聊聊有关Python的shutil模块,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
成都创新互联服务项目包括霞浦网站建设、霞浦网站制作、霞浦网页制作以及霞浦网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,霞浦网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到霞浦省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
常用模块 - shutil模块
一、简介
shutil – Utility functions for copying and archiving files and directory trees.(用于复制和存档文件和目录树的实用功能。)
shutil是shell
utility的缩写
shutil.move直接从一个地方挪到另一个地方,而os.rename常常只能重命名,不能挪动位置。
功能是:
>>>shutil.move('old.txt',r'c:datarchive') >>>shutil.copy('old.txt',r'c:datarchive') >>>os.remove('junk.dat')
二、高级文件操作(拷贝/移动/压缩/解压缩)
#!/usr/bin/env python # coding=utf-8 __author__ ='zhuo' __date__ ='2017/5/25' # shutil_demo.py高级文件操作(拷贝/移动/压缩/解压缩) importshutil defshutil_demo(): #拷贝文件 shutil.copy2('file.txt','temp.txt') #拷贝目录 shutil.copytree("root","temp", symlinks=False, ignore=shutil.ignore_patterns("*.pyc"), copy_function=shutil.copy2, ignore_dangling_symlinks=True) #删除目录 shutil.rmtree("temp", ignore_errors=True) #移动文件/目录 shutil.move("root","temp",copy_function=shutil.copy2) #获取磁盘使用空间 total, used, free =shutil.disk_usage(".") print("当前磁盘共: %iGB,已使用: %iGB,剩余: %iGB"%(total /1073741824, used /1073741824, free /1073741824)) #压缩文件 shutil.make_archive('Box','zip','temp') #解压文件 shutil.unpack_archive('Box.zip') defshutil_func(): #文件和目录操作 # shutil.copyfileobj(fsrc, fdst[, length]) //拷贝文件内容,将fsrc文件里的内容copy到fdst文件中, length:缓冲区大小 shutil.copyfileobj(open('file.txt','r'), open('temp.txt','w')) # shutil.copyfile(src, dst, *, follow_symlinks=True) //拷贝文件内容,同copyfileobj,如果dst=src,抛SameFileError异常, dst存在则替换 dst = shutil.copyfile('file.txt','temp.txt') # shutil.copymode(src, dst, *, follow_symlinks=True) //仅拷贝权限,其他信息不受影响 shutil.copymode('file.txt','temp.txt') # shutil.copystat(src, dst, *, follow_symlinks=True) //拷贝状态(权限/最后访问时间/上次修改时间/标志),其他不受迎影响 shutil.copystat('file.txt','temp.txt') # shutil.copy(src, dst, *, follow_symlinks=True) //拷贝文件(数据/权限) dst = shutil.copy('file.txt','temp.txt') # shutil.copy2(src, dst, *, follow_symlinks=True) //拷贝文件(尝试保留所有元数据) (不能拷贝创建时间,该时间可通过修改系统时间再创建文件来实现) dst = shutil.copy2('file.txt','temp.txt') # shutil.ignore_patterns(*patterns) # symlinks:True(复制链接) / False(复制文件), ignore=ignore_patterns("") //忽略的文件, copy_function=自定义复制函数, ignore_dangling_symlinks:True(忽略文件不存在异常) / False(错误列表中添加异常) # shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False) //递归的复制根目录下的整个目录树 dst = shutil.copytree("root","temp", symlinks=False, ignore=shutil.ignore_patterns("*.pyc"), copy_function=shutil.copy2, ignore_dangling_symlinks=True) # shutil.rmtree(path, ignore_errors=False, onerror=None) //删除整个目录树, ignore_errors:是否忽略删除失败错误, onerror=def error(func, path, excinfo) shutil.rmtree("temp", ignore_errors=True) # shutil.move(src, dst, copy_function=copy2) //递归移动文件/目录,目录存在则移动目录,文件存在则覆盖 dst = shutil.move("root","temp",copy_function=shutil.copy2) total, used, free =shutil.disk_usage(".")#给定路径的磁盘使用情况统计信息 # shutil.chown(path, user=None, group=None) //修改用户和组(Unix可用) # shutil.which(cmd, mode=os.F_OK | os.X_OK, path=None) //可执行文件路径, path:要查找的路径,未指定使用os.environ的结果 path_str = shutil.which("python") #异常 try:pass exceptshutil.SameFileError:pass# copyfile()时,源和目录是同一个文件时,抛此异常 exceptshutil.Error:pass# copytree()时,多文件操作时引发的异常,异常包含(srcname, dstname, excinfo) #压缩文件操作(封装了zipfile / tarfile) #创建归档文件base_name:压缩包文件名, format:格式zip / tar / bztar / xztar / gztar, root_dir:被归档的根目录(默认当前目录) # base_dir:保存归档文件的目录(默认当前目录) verbose:已弃用dry_run:True(不创建归档,但记录日志), owner:用户, group:用户组, logger:日志 # shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]]) dst = shutil.make_archive('Box','zip','temp')#注意:root_dir / base_dir至少写一个,不然会造成压缩包再次被打包的情况 #分拆归档, filename:文件名, extract_dir:解压到目录(默认当前目录), format:格式(未提供,根据扩展名查找,未找到引发ValueError) # shutil.unpack_archive(filename[, extract_dir[, format]]) shutil.unpack_archive('Box.zip') lists =shutil.get_archive_formats()#返回支持的归档格式列表[(format, info)] lists =shutil.get_unpack_formats()#返回所有注册格式的列表[(name, extensions, description)] #注册压缩格式, name:格式名, function:def func(base_name, base_dir, owner, group, dry_run, logger), extra_args:额外参数, description:说明信息 # shutil.register_archive_format(name, function[, extra_args[, description]]) # shutil.unregister_archive_format(name) //注销压缩格式 #注册解压格式name:格式名, extensions:扩展名列表, function:实现函数def unpack(filename, extract_dir), extra_args:额外参数(name, value), description:说明 # shutil.register_unpack_format(name, extensions, function[, extra_args[, description]]) # shutil.unregister_unpack_format(name) //注销解压格式 #终端 # shutil.get_terminal_size(fallback=(columns, lines)) columns, lines = shutil.get_terminal_size()#查询终端大小(宽,高),无法查询返回默认大小(80, 24) if__name__ =="__main__": shutil_demo() # shutil_func()
三、实例
#!/usr/bin/python3 # -*- coding:utf-8 -*- import shutil # 1 shutil.copyfileobj(fsrc, fdst[, length=16*1024]) # copy文件内容到另一个文件,可以copy指定大小的内容 # 注意! 在其中fsrc,fdst都是文件对象,都需要打开后才能进行复制操作 f1 = open("1.txt", "r") f2 = open("2.txt", "w+") shutil.copyfileobj(f1, f2) # 2 shutil.copyfile(src,dst) # copy文件内容,是不是感觉上面的文件复制很麻烦?还需要自己手动用open函数打开 # 文件,在这里就不需要了,事实上,copyfile调用了copyfileobj shutil.copyfile("1.txt", "3.txt") # 3 shutil.copymode(src,dst) # 仅copy权限,不更改文件内容,组和用户。 shutil.copymode("1.txt", "3.txt") # 4 shutil.copystat(src,dst) # 复制所有的状态信息,包括权限,组,用户,时间等 shutil.copystat("1.txt", "3.txt") # 5 shutil.copy(src,dst) # 复制文件的内容以及权限,先copyfile后copymode shutil.copy("1.txt", "4.txt") # 6 shutil.copy2(src,dst) # 复制文件的内容以及文件的所有状态信息。先copyfile后copystat shutil.copy2("1.txt", "5.txt") # 7 shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2,ignore_dangling_symlinks=False) # 递归的复制文件内容及状态信息 shutil.copytree("1", "2") # 8 shutil.rmtree(path, ignore_errors=False, onerror=None) # 递归地删除文件 shutil.rmtree("2") # 9 shutil.move(src, dst) # 递归的移动文件 shutil.move("1", "2") # 10 make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0,dry_run=0, owner=None, group=None, logger=None) # 压缩打包 # base_name: 压缩打包后的文件名或者路径名 # format: 压缩或者打包格式 "zip", "tar", "bztar"or "gztar" # root_dir: 将哪个目录或者文件打包(也就是源文件) shutil.make_archive("压缩包", "zip", r"2") # 入口函数 if __name__ == '__main__': pass
看完上述内容,你们对Python的shutil模块有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。