12.3. shutil模块¶
12.3.1. 常用的方法¶
import shutil
shutil.copyfile('data.db', 'archive.db') # 拷贝文件
shutil.move('/build/executables', 'installdir') # 移动文件或目录
shutil.copyfile( src, dst) # 从源src复制到dst中去。当然前提是目标地址是具备可写权限。抛出的异常信息为IOException. 如果当前的dst已存在的话就会被覆盖掉
shutil.move( src, dst) # 移动文件或重命名
shutil.copymode( src, dst) # 只是会复制其权限其他的东西是不会被复制的
shutil.copystat( src, dst) # 复制权限、最后访问时间、最后修改时间
shutil.copy( src, dst) # 复制一个文件到一个文件或一个目录
shutil.copy2( src, dst) # 在copy上的基础上再复制文件最后访问时间与修改时间也复制过来了,类似于cp –p的东西
shutil.copy2( src, dst) # 如果两个位置的文件系统是一样的话相当于是rename操作,只是改名;如果是不在相同的文件系统的话就是做move操作
shutil.copytree( olddir, newdir, True/Flase) # 把olddir拷贝一份newdir,如果第3个参数是True,则复制目录时将保持文件夹下的符号连接,如果第3个参数是False,则将在复制的目录下生成物理副本来替代符号连接
shutil.rmtree(src) # 递归删除一个目录以及目录内的所有内容
注
shutil.copy() # 函数将拷贝一个文件
shutil.copytree() # 将拷贝整个文件夹,以及它的所有内容。
shutil.move() # 函数用于重命名文件,以及文件移动
# 删除目录
os.rmdir和os.removedirs #要求删除从目录非空,不能进行强制删除
shutil.rmtree(src) # 不管目录是否非空,都直接删除整个目录
#一般使用
os.remove(path)/os.unlink(path) #删除单个文件
shutil.rmtree(src) # 删除整个目录
12.3.2. 文件和目录操作¶
shutil.copyfileobj(fsrc, fdst[, length])
#将文件内容拷贝到另一个文件中
shutil.copyfileobj(open("pexpect_test.py",'r'),open('new.txt','w'))
shutil.copyfile(src, dst, *, follow_symlinks=True)
#拷贝整个文件,没有第二个文件就创建,有就覆盖
shutil.copyfile("new.txt","new2.txt")
shutil.copymode(src, dst, *, follow_symlinks=True)
#仅拷贝文件权限,文件的内容、组、用户均不变
shutil.copymode('old.txt', 'new.txt')
# 文件权限都变成644了
shutil.copystat(src, dst, *, follow_symlinks=True)
#拷贝文件状态的信息,文件必须存在,不copy改动时间
shutil.copystat('old.txt', 'new.txt')
shutil.copy(src, dst, *, follow_symlinks=True)
#拷贝文件和状态信息,同样不copy改动时间
shutil.copy2('old.txt', 'new.txt')
shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False)
#递归的去拷贝文件夹
#folder2目录必须不存在,symlinks=True只copy链接文件,如果等于False就copy源文件,ignore等于不copy的文件或者目录
shutil.copytree('folder1', 'folder2', symlinks=False, ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))
shutil.rmtree(path, ignore_errors=False, onerror=None)
#递归的去删除文件
shutil.rmtree('folder2')
shutil.move(src, dst, copy_function=copy2)
# 递归的去移动文件,它类似mv命令,其实就是重命名。
shutil.move(src, dst, copy_function=copy2)
shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]])
# /home/ansheng/folder3是保存的文件,gztar是后缀名,/home/folder3是要打包的路径
>>> shutil.make_archive("/home/ansheng/folder3", 'gztar', root_dir='/home/folder3')
可选参数:
参数 |
说明 |
|---|---|
base_name |
压缩包的文件名,也可以是压缩包的路径 |
format |
压缩包种类,“zip”, “tar”, “bztar”,“gztar” |
root_dir |
要压缩的文件夹路径(默认当前目录) |
owner |
用户,默认当前用户 |
group |
组,默认当前组 |
shutil对压缩包的处理是调用ZipFile和TarFile两个模块来进行的
copy
shutil.copyfile('hello.py', 'welcome.py')
print("Copy Successful\n")
move
shutil.move('/home/student/work/sample.txt', '/home/student/Desktop')
rename
shutil.move('sample.bin', 'sample.txt')