Python常用模块——文件复制模块shutil

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模块封装了一些常见的文件和文件夹操作,支持复制、移动、删除、重命名、压缩和解压缩等操作,使用起来非常方便。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签