1. 简介
shutil模块为Python的内置模块,支持对文件和文件夹进行复制、移动、删除和重命名等操作,同时还支持压缩、解压缩文件和文件夹。
2. 文件复制
2.1. shutil.copy方法
shutil.copy方法用于将单个文件从一个位置复制到另一个位置。
import shutil
# 将example.txt从/tmp目录复制到/var/tmp目录下
shutil.copy('/tmp/example.txt', '/var/tmp/')
在以上示例中,我们将example.txt文件从/tmp目录复制到/var/tmp目录下。
2.2. shutil.copy2方法
除了复制源文件以外,shutil.copy2方法还能够保留源文件的元数据(如文件权限、创建时间等)。
import shutil
# 将example.txt从/tmp目录复制到/var/tmp目录下,并保留源文件的元数据
shutil.copy2('/tmp/example.txt', '/var/tmp/')
注意:使用shutil.copy2方法复制文件时,目标文件夹需要已创建。
2.3. shutil.copyfile方法
与shutil.copy方法不同,shutil.copyfile方法不会保留源文件的元数据。它使用目标文件的元数据来创建一个新的文件。
import shutil
# 将example.txt从/tmp目录复制到/var/tmp目录下
shutil.copyfile('/tmp/example.txt', '/var/tmp/example-copy.txt')
在以上示例中,我们将example.txt文件从/tmp目录复制到/var/tmp/example-copy.txt文件中。
2.4. shutil.copytree方法
shutil.copytree方法用于将整个文件夹从一个位置复制到另一个位置。该方法会递归地复制所有文件和文件夹,包括它们的子文件夹。
import shutil
# 将/tmp目录下的example目录复制到/var/tmp目录下
shutil.copytree('/tmp/example', '/var/tmp/example-copy')
在以上示例中,我们将/tmp/example目录整个复制到了/var/tmp/example-copy目录下。
2.5. shutil.ignore_patterns方法
shutil.copytree方法还支持忽略某些文件或文件夹。我们可以使用shutil.ignore_patterns方法指定忽略的规则,该方法返回一个函数,用于检查文件和文件夹是否应该被忽略。
import shutil
# 定义忽略规则
def ignore(pattern):
def _ignore(path, names):
ignored_names = []
for name in names:
if fnmatch.fnmatch(name, pattern):
ignored_names.append(name)
return set(ignored_names)
return _ignore
# 复制/tmp/example目录,忽略所有.pyc和.git文件夹
shutil.copytree('/tmp/example', '/var/tmp/example-copy', ignore=shutil.ignore_patterns('*.pyc', '.git'))
在以上示例中,我们使用了ignore_patterns方法来定义忽略规则,然后将这个规则传递给copytree方法中,忽略了所有.pyc和.git文件夹。
2.6. shutil.move方法
shutil.move方法用于将文件或文件夹从一个位置移动到另一个位置。如果目标位置已存在同名文件或文件夹,则会被覆盖。
import shutil
# 将example.txt从/tmp目录移动到/var/tmp目录下
shutil.move('/tmp/example.txt', '/var/tmp/')
在以上示例中,我们将example.txt文件从/tmp目录移动到/var/tmp目录下。
3. 文件夹压缩和解压缩
3.1. shutil.make_archive方法
shutil.make_archive方法用于创建压缩文件。该方法接受三个参数:archive_name(要创建的压缩文件的名称)、format(要创建的压缩文件的格式)和root_dir(要被压缩的根目录)。
import shutil
# 将/tmp/example目录压缩为example.tar.gz文件
shutil.make_archive('/tmp/example', 'gztar', root_dir='/tmp')
在以上示例中,我们将/tmp/example目录压缩为example.tar.gz文件。
3.2. shutil.unpack_archive方法
shutil.unpack_archive方法用于解压缩文件。该方法接受两个参数:filename(要解压缩的文件名)和extract_dir(要解压缩到的目标目录)。
import shutil
# 解压缩example.tar.gz文件到/var/tmp目录下
shutil.unpack_archive('/tmp/example.tar.gz', '/var/tmp/')
在以上示例中,我们将example.tar.gz文件解压缩到了/var/tmp目录下。
4. 文件和文件夹删除和重命名
4.1. 文件删除
使用os模块的os.remove方法可以删除单个文件:
import os
# 删除example.txt文件
os.remove('/tmp/example.txt')
在以上示例中,我们删除了example.txt文件。
4.2. 文件夹删除
使用shutil模块的shutil.rmtree方法可以递归地删除整个目录:
import shutil
# 删除example目录及其所有子文件和文件夹
shutil.rmtree('/tmp/example')
在以上示例中,我们递归地删除了/tmp/example目录及其所有子文件和文件夹。
4.3. 文件和文件夹重命名
使用os模块的os.rename方法可以将单个文件或文件夹重命名:
import os
# 将example.txt文件重命名为example2.txt
os.rename('/tmp/example.txt', '/tmp/example2.txt')
# 将example目录重命名为example2
os.rename('/tmp/example', '/tmp/example2')
在以上示例中,我们分别将example.txt文件和example目录重命名为example2.txt和example2。
5. 总结
shutil模块封装了一些常见的文件和文件夹操作,支持复制、移动、删除、重命名、压缩和解压缩等操作,使用起来非常方便。