Python模块之shutil

简介:
shutil模块提供了一些针对文件和目录的高级操作,主要是拷贝、移动。

方法介绍:

  • shutil.copyfile(src, dst)

复制文件src的内容到dst并返回dst,如果dst不存在则自动创建。src和dst是字符串类型的路径名,如果src和dst指向同一个文件,抛出SameFileError异常。
目标位置必须是可写的,否则将抛出OSError异常(实际抛出的是PermissionError)。如果dst已经存在,则直接覆盖。特殊文件比如块设备、字符设备、管道不能使用此函数复制。

>>> import shutil
>>> shutil.copyfile("xt.txt","tx.txt")
'tx.txt'  #返回dst文件名
>>> with open('tx.txt') as f:
	print(f.read())

do something!
  • shutil.copymode(src, dst)
    仅拷贝权限,内容、组、用户均不变。目标文件必须存在。

  • shutil.copystat(src, dst)
    仅拷贝状态的信息,包括:mode bits, atime, mtime, flags。目标文件必须存在。

  • shutil.copy(src, dst)
    同时复制文件的内容以及权限,也就是先copyfile()然后copymode()。
    复制文件src的内容和权限位到dst,dst可以是文件或目录,如果是文件,函数的返回值就是dst,如果是目录,函数的返回值就是src的文件名与dst的路径拼接。src和dst都是字符串类型,如果dst指向一个目录,则创建与src同名(basename)的新文件。

shutil.copy('xt.txt','xt1')
'xt1'
>>> with open('xt1') as f:
	print(f.read())
	
do something!

>>> shutil.copy('xt.txt',r'C:\Users\Yoke\Desktop\test_xutao\F\\')		
'C:\\Users\\Yoke\\Desktop\\test_xutao\\F\\\\xt.txt'
>>> with open(r'C:\Users\Yoke\Desktop\test_xutao\F\xt.txt') as f:
		print(f.read())	
do something!
  • shutil.copy2(src, dst)
    同时复制文件的内容以及文件的所有状态信息。先copyfile()后copystat()。

  • shutil.ignore_patterns(*patterns)
    忽略指定的文件。通常配合下面的copytree()方法使用。

  • shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2,ignore_dangling_symlinks=False)

递归复制以src为根目录的整个目录树,返回目标目录dst。dst必须是不存在的目录,它和它不存在的父目录都将被创建。使用copystat()复制目录元数据,使用copy2()复制文件内容和元数据
symlinks:指定是否复制软链接。小心陷入死循环。
ignore:指定不参与复制的文件,其值应该是一个ignore_patterns()方法。
copy_function:指定复制的模式

>>> import glob
>>> import shutil	

>>> print(glob.glob('**',recursive='True'))	
['1.py', '123', '2.py', 'F', 'F\\1.py', 'F\\2.py', 'F\\T', 'F\\T\\1.py', 'F\\T\\2.py', 'F\\test1', 'F\\test2', 'F\\xt.txt', 'test1', 'test2', 'tx.txt', 'xt.txt', 'xt1', '获取文件信息.py']

#全部复制
>>> shutil.copytree(r'C:\Users\Yoke\Desktop\test_xutao',r'C:\Users\Yoke\Desktop\test_bridge')
'C:\\Users\\Yoke\\Desktop\\test_bridge'
>>> for i in glob.glob(r'C:\Users\Yoke\Desktop\test_bridge\**',recursive='True'):
		print(i)		
C:\Users\Yoke\Desktop\test_bridge\
C:\Users\Yoke\Desktop\test_bridge\1.py
C:\Users\Yoke\Desktop\test_bridge\123
C:\Users\Yoke\Desktop\test_bridge\2.py
C:\Users\Yoke\Desktop\test_bridge\F
C:\Users\Yoke\Desktop\test_bridge\F\1.py
C:\Users\Yoke\Desktop\test_bridge\F\2.py
C:\Users\Yoke\Desktop\test_bridge\F\T
C:\Users\Yoke\Desktop\test_bridge\F\T\1.py
C:\Users\Yoke\Desktop\test_bridge\F\T\2.py
C:\Users\Yoke\Desktop\test_bridge\F\test1
C:\Users\Yoke\Desktop\test_bridge\F\test2
C:\Users\Yoke\Desktop\test_bridge\F\xt.txt
C:\Users\Yoke\Desktop\test_bridge\test1
C:\Users\Yoke\Desktop\test_bridge\test2
C:\Users\Yoke\Desktop\test_bridge\tx.txt
C:\Users\Yoke\Desktop\test_bridge\xt.txt
C:\Users\Yoke\Desktop\test_bridge\xt1
C:\Users\Yoke\Desktop\test_bridge\获取文件信息.py

#使用shutil.ignore_patterns忽略指定文件
>>>shutil.copytree(r'C:\Users\Yoke\Desktop\test_xutao',r'C:\Users\Yoke\Desktop\test_apple',ignore=shutil.ignore_patterns('*.txt','*[1-9]'))
>>> for i in glob.glob(r'C:\Users\Yoke\Desktop\test_apple\**',recursive='True'):
		print(i)			
C:\Users\Yoke\Desktop\test_apple\
C:\Users\Yoke\Desktop\test_apple\1.py
C:\Users\Yoke\Desktop\test_apple\2.py
C:\Users\Yoke\Desktop\test_apple\F
C:\Users\Yoke\Desktop\test_apple\F\1.py
C:\Users\Yoke\Desktop\test_apple\F\2.py
C:\Users\Yoke\Desktop\test_apple\F\T
C:\Users\Yoke\Desktop\test_apple\F\T\1.py
C:\Users\Yoke\Desktop\test_apple\F\T\2.py
C:\Users\Yoke\Desktop\test_apple\获取文件信息.py
  • shutil.rmtree(path[, ignore_errors[, onerror]])
    递归地删除目录及子目录内的文件。注意!该方法不会询问yes或no,被删除的文件也不会出现在回收站里,请务必小心!

  • shutil.move(src, dst)
    递归地移动文件或目录到目标位置,类似mv命令,其实就是重命名。

  • shutil.which(cmd)
    类似linux的which命令,返回执行该命令的程序路径。Python3.3新增

  • shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]])
    创建归档或压缩文件。

base_name:压缩后的文件名(不要写后缀,会从format带出)。如果不指定绝对路径,则压缩文件保存在当前目录下。这个参数必须指定。
format:压缩格式,可以是“zip”, “tar”, “bztar” ,“gztar”,“xztar”中的一种。这个参数也必须指定。
root_dir:设置压缩包里的根目录,一般使用默认值,不特别指定。
base_dir:要进行压缩的源文件或目录。(最好进入该目录的父目录下,然后不带路径压缩,否则解压后带出路径名)
owner:用户,默认当前用户。
group:组,默认当前组。
logger:用于记录日志,通常是logging.Logger对象。

>>> os.chdir(r'C:\Users\Yoke\Desktop')
>>> shutil.make_archive(r'C:\Users\Yoke\Desktop\test_xutao','tar',base_dir=r'test_xutao')
		
'C:\\Users\\Yoke\\Desktop\\test_xutao.tar'
  • shutil.unpack_archive(filename[, extract_dir[, format]])
    解压缩或解包源文件。

filename是压缩文档的完整路径
extract_dir是解压缩路径,默认为当前目录。
format是压缩格式。默认使用文件后缀名代码的压缩格式。

>>> shutil.unpack_archive(r'C:\Users\Yoke\Desktop\test_xutao.tar',extract_dir=r'C:\Users\Yoke\Desktop\new_dir',format='tar')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值