Python将一个文件夹下的文件复制到另一个文件夹中
在日常工作中,我们经常需要将一个文件夹下的文件复制到另一个文件夹中,这在Python中可以通过使用shutil模块来实现。shutil模块是Python标准库中的一个文件操作模块,提供了一系列对文件和文件夹进行操作的函数。
1. 复制单个文件
首先,我们来看如何将一个文件夹下的单个文件复制到另一个文件夹中。我们可以使用shutil.copy()函数来实现这个功能。
import shutil
# 源文件路径
src_file = 'source_folder/file.txt'
# 目标文件夹路径
dst_folder = 'destination_folder/'
# 复制文件
shutil.copy(src_file, dst_folder)
运行以上代码后,源文件夹中的file.txt文件将被复制到目标文件夹中。
2. 复制整个文件夹
接下来,我们来看如何将一个文件夹下的所有文件复制到另一个文件夹中。我们可以使用shutil.copytree()函数来实现这个功能。
import shutil
# 源文件夹路径
src_folder = 'source_folder/'
# 目标文件夹路径
dst_folder = 'destination_folder/'
# 复制文件夹
shutil.copytree(src_folder, dst_folder)
运行以上代码后,源文件夹中的所有文件将被复制到目标文件夹中。
3. 复制文件夹中的特定文件类型
有时候,我们只需要复制文件夹中的特定类型的文件,比如只复制所有的txt文件。我们可以使用os模块来遍历文件夹中的所有文件,然后根据文件类型进行复制。
import os
import shutil
# 源文件夹路径
src_folder = 'source_folder/'
# 目标文件夹路径
dst_folder = 'destination_folder/'
# 遍历源文件夹中的所有文件
for file in os.listdir(src_folder):
if file.endswith('.txt'):
src_file = os.path.join(src_folder, file)
shutil.copy(src_file, dst_folder)
运行以上代码后,源文件夹中所有的txt文件将被复制到目标文件夹中。
4. 复制文件夹中的文件并保持文件结构
有时候,我们需要保持文件夹中的文件结构,将文件夹中的文件复制到目标文件夹中,并保持原有的文件夹结构。我们可以使用shutil.copytree()函数来实现这个功能。
import shutil
# 源文件夹路径
src_folder = 'source_folder/'
# 目标文件夹路径
dst_folder = 'destination_folder/'
# 复制文件夹并保持文件结构
shutil.copytree(src_folder, dst_folder)
运行以上代码后,源文件夹中的文件将被复制到目标文件夹中,并保持原有的文件夹结构。
5. 复制文件夹中的文件并重命名
有时候,我们需要将文件夹中的文件复制到目标文件夹中,并重命名文件。我们可以使用shutil.copy()函数来实现这个功能。
import shutil
# 源文件路径
src_file = 'source_folder/file.txt'
# 目标文件夹路径
dst_folder = 'destination_folder/'
# 目标文件名
dst_file = 'new_file.txt'
# 复制文件并重命名
shutil.copy(src_file, os.path.join(dst_folder, dst_file))
运行以上代码后,源文件夹中的file.txt文件将被复制到目标文件夹中,并重命名为new_file.txt。
6. 复制文件夹中的文件并修改文件权限
有时候,我们需要将文件夹中的文件复制到目标文件夹中,并修改文件的权限。我们可以使用shutil.copy()函数来实现这个功能。
import shutil
# 源文件路径
src_file = 'source_folder/file.txt'
# 目标文件夹路径
dst_folder = 'destination_folder/'
# 复制文件并修改权限
shutil.copy(src_file, dst_folder)
os.chmod(os.path.join(dst_folder, 'file.txt'), 0o777)
运行以上代码后,源文件夹中的file.txt文件将被复制到目标文件夹中,并修改文件权限为777。
7. 复制文件夹中的文件并保留元数据
有时候,我们需要将文件夹中的文件复制到目标文件夹中,并保留文件的元数据,比如文件的创建时间、修改时间等。我们可以使用shutil.copy2()函数来实现这个功能。
import shutil
# 源文件路径
src_file = 'source_folder/file.txt'
# 目标文件夹路径
dst_folder = 'destination_folder/'
# 复制文件并保留元数据
shutil.copy2(src_file, dst_folder)
运行以上代码后,源文件夹中的file.txt文件将被复制到目标文件夹中,并保留文件的元数据。
8. 复制文件夹中的文件并忽略特定文件
有时候,我们需要将文件夹中的文件复制到目标文件夹中,但是需要忽略特定的文件。我们可以使用shutil.copy()函数和os模块来实现这个功能。
import os
import shutil
# 源文件夹路径
src_folder = 'source_folder/'
# 目标文件夹路径
dst_folder = 'destination_folder/'
# 遍历源文件夹中的所有文件
for file in os.listdir(src_folder):
if not file.startswith('ignore'):
src_file = os.path.join(src_folder, file)
shutil.copy(src_file, dst_folder)
运行以上代码后,源文件夹中除了以ignore开头的文件外,其他文件都将被复制到目标文件夹中。
9. 复制文件夹中的文件并压缩
有时候,我们需要将文件夹中的文件复制到目标文件夹中,并将文件压缩成zip格式。我们可以使用shutil.make_archive()函数来实现这个功能。
import shutil
# 源文件夹路径
src_folder = 'source_folder/'
# 目标文件夹路径
dst_folder = 'destination_folder/'
# 压缩文件夹
shutil.make_archive('archive', 'zip', src_folder)
shutil.move('archive.zip', dst_folder)
运行以上代码后,源文件夹中的所有文件将被压缩成zip格式,并复制到目标文件夹中。
10. 复制文件夹中的文件并加密
有时候,我们需要将文件夹中的文件复制到目标文件夹中,并对文件进行加密。我们可以使用pycryptodome库来实现文件加密。
from Crypto.Cipher import AES
import os
# 生成16字节的密钥
key = os.urandom(16)
# 加密函数
def encrypt_file(key, file_path):
cipher = AES.new(key, AES.MODE_EAX)
with open(file_path, 'rb') as f:
data = f.read()
ciphertext, tag = cipher.encrypt_and_digest(data)
with open(file_path + '.enc', 'wb') as f:
f.write(cipher.nonce)
f.write(tag)
f.write(ciphertext)
# 源文件路径
src_file = 'source_folder/file.txt'
# 目标文件夹路径
dst_folder = 'destination_folder/'
# 加密文件
encrypt_file(key, src_file)
shutil.move(src_file + '.enc', dst_folder)
运行以上代码后,源文件夹中的file.txt文件将被加密并复制到目标文件夹中。
通过以上示例代码,我们可以看到如何使用Python中的shutil模块来实现将一个文件夹下的文件复制到另一个文件夹中的功能。无论是复制单个文件、整个文件夹,还是对文件进行重命名、权限修改、元数据保留、忽略特定文件、压缩、加密等操作,shutil模块都提供了相应的函数来实现这些功能。在实际工作中,我们可以根据具体需求选择合适的函数来完成文件复制操作,提高工作效率。