欢迎访问宙启技术站
智能推送

Python中如何使用函数复制文件

发布时间:2023-06-15 13:23:12

使用Python编程语言可以很容易地实现复制文件的功能,下面介绍使用函数复制文件的方法。先介绍两种基本的复制文件的方法。

一、使用shutil库

Python的标准库“shutil”提供了非常方便的复制文件功能,具体代码如下:

import shutil
 
# 指定源文件路径和目标文件路径
src_file = './file1.txt'
dst_file = './file2.txt'
 
# 复制文件
shutil.copy(src_file, dst_file)

其中,“shutil.copy()”函数用于将源文件复制到指定的目标文件,如果文件已经存在,则会覆盖新的内容。

二、使用fileinput库

Python的标准库“fileinput”提供了另一种复制文件的方式,具体代码如下:

import fileinput
 
# 指定源文件路径和目标文件路径
src_file = './file1.txt'
dst_file = './file2.txt'
 
# 打开源文件和目标文件
with fileinput.input(src_file) as src, open(dst_file, 'w') as dst:
    # 从源文件中读取内容并写入到目标文件中
    for line in src:
        dst.write(line)

其中,“fileinput.input()”函数用于打开源文件并返回一个文件对象,通过“with”语句管理上下文。在上下文管理器内部,遍历源文件中的每一行并写入到目标文件中。

通过以上两种方法可以完成文件的复制操作,但是在实际应用中,我们可能需要支持更多的功能,比如文件不存在时创建文件、支持目录复制等等。这时我们可以自己定义一个复制文件的函数来实现更多功能的支持。

三、自定义复制文件函数

下面是一个自定义复制文件函数的实现,支持以下功能:

1、如果目标文件所在的目录不存在,则自动创建目录。

2、如果目标文件已经存在,则提示用户是否覆盖文件。

3、如果复制的是一个目录,则会递归复制整个目录。

import os
import shutil
 
def copy_file(src, dst):
    """
    复制文件或目录
    :param src: 源文件或目录
    :param dst: 目标文件或目录
    """
    # 如果源文件或目录不存在,则提示错误
    if not os.path.exists(src):
        print('Error: source file or directory does not exist.')
        return
    
    # 如果目标文件所在目录不存在,则创建目录
    if not os.path.exists(os.path.dirname(dst)):
        os.makedirs(os.path.dirname(dst))
    
    # 如果目标文件已经存在,则提示用户是否覆盖
    if os.path.exists(dst):
        choice = input('Target file already exists. Overwrite it? (y/n) ')
        if choice.lower() != 'y':
            return
    
    # 如果源文件是目录,则调用复制目录的函数
    if os.path.isdir(src):
        copy_dir(src, dst)
    # 如果源文件是文件,则调用shutil.copy()函数复制文件
    else:
        shutil.copy(src, dst)
    
    print('Copy file successfully.')
 
def copy_dir(src, dst):
    """
    复制目录
    :param src: 源目录
    :param dst: 目标目录
    """
    # 获取源目录中的所有文件和目录
    files = os.listdir(src)
    for file in files:
        # 获取源文件或目录的全路径和目标文件或目录的全路径
        src_file = os.path.join(src, file)
        dst_file = os.path.join(dst, file)
        # 如果源文件或目录是目录,则递归复制该目录
        if os.path.isdir(src_file):
            copy_dir(src_file, dst_file)
        # 如果源文件或目录是文件,则调用shutil.copy()函数复制文件
        else:
            shutil.copy(src_file, dst_file)
    
    print('Copy directory successfully.')

调用该函数进行文件复制时,只需指定源文件或目录和目标文件或目录即可:

# 复制文件
copy_file('./file1.txt', './file2.txt')
 
# 复制目录
copy_file('./dir1', './dir2')

通过自定义函数实现文件复制,不仅支持更多的功能,而且可以提高代码复用率,方便后期维护。如果你在Python程序中需要复制文件,可以选择任意一种方法来实现。