代码之家  ›  专栏  ›  技术社区  ›  hidayat

在Python中复制多个文件

  •  72
  • hidayat  · 技术社区  · 14 年前

    如何使用Python将一个目录中的所有文件复制到另一个目录。 我将源路径和目标路径作为字符串。

    6 回复  |  直到 5 年前
        1
  •  149
  •   K Erlandsson    5 年前

    你可以用 os.listdir() 要获取源目录中的文件, os.path.isfile() 查看它们是否是常规文件(包括*nix系统上的符号链接),以及 shutil.copy

    下面的代码只将常规文件从源目录复制到目标目录(我假设您不希望复制任何子目录)。

    import os
    import shutil
    src_files = os.listdir(src)
    for file_name in src_files:
        full_file_name = os.path.join(src, file_name)
        if os.path.isfile(full_file_name):
            shutil.copy(full_file_name, dest)
    
        2
  •  32
  •   Steven    14 年前

    如果不想复制整个树(带有子曲面等),请使用或 glob.glob("path/to/dir/*.*") shutil.copy 复制每个文件。

    for filename in glob.glob(os.path.join(source_dir, '*.*')):
        shutil.copy(filename, dest_dir)
    
        3
  •  17
  •   codersl    4 年前

    看看 shutil in the Python docs ,特别是 copytree 命令。

    shutil.copytree(source, destination, dirs_exist_ok=True)
    
        4
  •  5
  •   Constantinius    4 年前
    def recursive_copy_files(source_path, destination_path, override=False):
        """
        Recursive copies files from source  to destination directory.
        :param source_path: source directory
        :param destination_path: destination directory
        :param override if True all files will be overridden otherwise skip if file exist
        :return: count of copied files
        """
        files_count = 0
        if not os.path.exists(destination_path):
            os.mkdir(destination_path)
        items = glob.glob(source_path + '/*')
        for item in items:
            if os.path.isdir(item):
                path = os.path.join(destination_path, item.split('/')[-1])
                files_count += recursive_copy_files(source_path=item, destination_path=path, override=override)
            else:
                file = os.path.join(destination_path, item.split('/')[-1])
                if not os.path.exists(file) or override:
                    shutil.copyfile(item, file)
                    files_count += 1
        return files_count
    
        5
  •  4
  •   Isaac Ewhuiknebueze    8 年前
    import os
    import shutil
    os.chdir('C:\\') #Make sure you add your source and destination path below
    
    dir_src = ("C:\\foooo\\")
    dir_dst = ("C:\\toooo\\")
    
    for filename in os.listdir(dir_src):
        if filename.endswith('.txt'):
            shutil.copy( dir_src + filename, dir_dst)
        print(filename)
    
        6
  •  4
  •   Dustin Michels    6 年前

    import os
    import shutil
    
    def recursive_copy(src, dest):
        """
        Copy each file from src dir to dest dir, including sub-directories.
        """
        for item in os.listdir(src):
            file_path = os.path.join(src, item)
    
            # if item is a file, copy it
            if os.path.isfile(file_path):
                shutil.copy(file_path, dest)
    
            # else if item is a folder, recurse 
            elif os.path.isdir(file_path):
                new_dest = os.path.join(dest, item)
                os.mkdir(new_dest)
                recursive_copy(file_path, new_dest)
    

    如果可以的话,一定要用 shutil.copytree(src, dest)