python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python的shutil

Python中的shutil标准库用法解析

作者:生有涯,知无涯

这篇文章主要介绍了Python中的shutil标准库用法解析,shutil模块提供了许多关于文件和文件集合的高级操作,特别提供了支持文件复制和删除的功能,需要的朋友可以参考下

1.文件夹与文件操作

copyfileobj(fsrc, fdst, length=16*1024): 将fsrc文件内容复制至fdst文件,length为fsrc每次读取的长度,用做缓冲区大小

import shutil
f1 = open('shutil1.txt', 'r', encoding='utf-8')
f2 = open('shutil2.txt', 'a+', encoding='utf-8')
shutil.copyfileobj(f1, f2, length=512)

copyfile(src, dst): 将src文件内容复制至dst文件

# copyfile(src, dst): 将src文件内容复制至dst文件
import shutil
shutil.copy('shutil1.txt', 'shutil1_copy.txt')

copymode(src, dst): 将src文件权限复制至dst文件。文件内容,所有者和组不受影响

# copymode(src, dst)将src文件权限复制至dst文件。
import shutil
shutil.copymode("file.txt","file_copy.txt")

copy(src, dst): 将文件src复制至dst。dst可以是个目录,会在该目录下创建与src同名的文件,若该目录下存在同名文件,将会报错提示已经存在同名文件。权限会被一并复制。本质是先后调用了copyfile与copymode而已

# copy(src, dst)**: 将文件src复制至dst。dst可以是个目录
import shutil
import os
shutil.copy("file.txt","file_copy.txt")
# 或者
shutil.copy("file.txt",os.path.join(os.getcwd(),"copy"))  # os.getcwd()获取当前工作目录

copytree(src, dst, symlinks=False, ignore=None): 拷贝文档树,将src文件夹里的所有内容拷贝至dst文件夹

import shutil,os
folder1 = os.path.join(os.getcwd(),"aaa")
# bbb与ccc文件夹都可以不存在,会自动创建
folder2 = os.path.join(os.getcwd(),"bbb","ccc")
# 将"abc.txt","bcd.txt"忽略,不复制
shutil.copytree(folder1,folder2,ignore=shutil.ignore_patterns("abc.txt","bcd.txt")

rmtree(path, ignore_errors=False, οnerrοr=None): 移除文档树,将文件夹目录删除

import shutil,os
folder1 = os.path.join(os.getcwd(),"aaa")
shutil.rmtree(folder1)

move(src, dst): 将src移动至dst目录下。若dst目录不存在,则效果等同于src改名为dst。若dst目录存在,将会把src文件夹的所有内容移动至该目录下面

import shutil,os
# 示例一,将src文件夹移动至dst文件夹下面,如果bbb文件夹不存在,则变成了重命名操作
folder1 = os.path.join(os.getcwd(),"aaa")
folder2 = os.path.join(os.getcwd(),"bbb")
shutil.move(folder1, folder2)
# 示例二,将src文件移动至dst文件夹下面,如果bbb文件夹不存在,则变成了重命名操作
file1 = os.path.join(os.getcwd(),"aaa.txt")
folder2 = os.path.join(os.getcwd(),"bbb")
shutil.move(file1, folder2)
# 示例三,将src文件重命名为dst文件(dst文件存在,将会覆盖)
file1 = os.path.join(os.getcwd(),"aaa.txt")
file2 = os.path.join(os.getcwd(),"bbb.txt")
shutil.move(file1, file2)

2.归档操作

shutil还提供了创建和读取压缩和存档文件的高级使用程序。内部实现主要依靠的是zipfile和tarfile模块

make_archive(base_name, format, root_dir, …): 生成压缩文件

# 将当前工作目录下的make_archive文件夹里面的内容打包zip格式,保存到当前工作目录下(并给压缩包起名为shutil1)
import shutil
import os
base_name = os.path.join(os.getcwd(), 'shutil1')  # 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径。
format = 'zip'  # 压缩包种类:“zip”, “tar”, “bztar”,“gztar”
root_dir = os.path.join(os.getcwd(), 'make_archive')  # 要压缩的文件夹路径
shutil.make_archive(base_name, format, root_dir)
# 将当前工作目录下的make_archive文件夹里面的内容打包zip格式,起名为abc,保存到当前工作目录下(没有拼接路径所以默认当前工作目录)
import shutil
import os
base_name = 'abc'  # 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径。
format = 'zip'  # 压缩包种类:“zip”, “tar”, “bztar”,“gztar”
root_dir = os.path.join(os.getcwd(), 'make_archive')  # 要压缩的文件夹路径
shutil.make_archive(base_name, format, root_dir)

unpack_archive(filename, extract_dir=None, format=None): 解压操作。Python3新增方法

# 将当前目下下的abc.zip解压缩到当前目录并将解压缩后的文件夹更名为aaa
import shutil
import os
zip_path = os.path.join(os.getcwd(), 'abc.zip')
extract_dir = os.path.join(os.getcwd(), 'aaa')
shutil.unpack_archive(zip_path, extract_dir)

到此这篇关于Python中的shutil标准库用法解析的文章就介绍到这了,更多相关Python的shutil内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文