迭代文件夹名称列表以复制文件夹(如果存在)

问题描述 投票:0回答:2

这就是我将文件夹

src
从源复制到工作区目标的方法 - 如果内容已存在,则替换内容:

def copy_and_replace(directory):
    target = os.path.join('workspace', directory, 'src')
    source = os.path.join('..', 'source', directory, 'src')
    try:
        if os.path.isdir(target):
            shutil.rmtree(target)
            print(f"Directory removed successfully: {target}")
        shutil.copytree(source, target)
        print(f"Directory copied successfully: {target}")

    except OSError as o:
        print(f"Error, {o.strerror}: {directory}")

现在我想再定义两个文件夹,如果存在也应该复制它们。当然我可以这样做:

def copy_and_replace(directory):
    targetSrc = os.path.join('workspace', directory, 'src')
    sourceSrc = os.path.join('..', 'source', directory, 'src')
    targetPbl = os.path.join('workspace', directory, 'public')
    sourcePbl = os.path.join('..', 'source', directory, 'public')
    try:
        if os.path.isdir(targetSrc): # src folder is always existing
            shutil.rmtree(targetSrc)
            print(f"Directory removed successfully: {targetSrc}")
        shutil.copytree(sourceSrc, targetSrc)
        print(f"Directory copied successfully: {targetSrc}")

        if os.path.isdir(sourcePbl): # Check if public folder is existing in source
            if os.path.isdir(targetPbl):
                shutil.rmtree(targetPbl)
                print(f"Directory removed successfully: {targetPbl}")
            shutil.copytree(sourcePbl, targetPbl)
            print(f"Directory copied successfully: {targetPbl}")

        # do this last part for multiple folder like `specs`, `assets` and so on

    except OSError as o:
        print(f"Error, {o.strerror}: {directory}")

是否可以使用文件夹名称列表并迭代这些项目来检查源中是否存在文件夹,以及是否存在将其复制到目标工作区?

python
2个回答
0
投票

当然可以

def copy_and_replace(directory):
    paths = [
        [os.path.join('..', 'source', directory, 'src'), os.path.join('workspace', directory, 'src')],
        [os.path.join('..', 'source', directory, 'public'), os.path.join('workspace', directory, 'public')]
    ]

    for src, target in paths:

        try:
            if os.path.isdir(target): # src folder is always existing
                shutil.rmtree(target)
                print(f"Directory removed successfully: {target}")
            shutil.copytree(src, target)
            print(f"Directory copied successfully: {target}")

        except OSError as o:
            print(f"Error, {o.strerror}: {directory}")

如果您想不太具体,并且您知道目录

source
target
位于同一位置,您可以这样做

def copy_and_replace(directory):
    paths = [
        [os.path.join('..', 'source', directory, 'src'), os.path.join('workspace', directory, 'src')],
        [os.path.join('..', 'source', directory, 'public'), os.path.join('workspace', directory, 'public')]
    ]

    for src, target in paths:


0
投票

是的,这是可能的。

import os
import shutil

def copy_and_replace(directory, folders_to_copy):
    target_src = os.path.join('workspace', directory, 'src')
    source_src = os.path.join('..', 'source', directory, 'src')
    
    try:
        # Remove and copy the 'src' folder
        if os.path.isdir(target_src):
            shutil.rmtree(target_src)
            print(f"Directory removed successfully: {target_src}")
        shutil.copytree(source_src, target_src)
        print(f"Directory copied successfully: {target_src}")

        # Iterate over additional folders to copy
        for folder_name in folders_to_copy:
            source_folder = os.path.join('..', 'source', directory, folder_name)
            target_folder = os.path.join('workspace', directory, folder_name)

            if os.path.isdir(source_folder):
                if os.path.isdir(target_folder):
                    shutil.rmtree(target_folder)
                    print(f"Directory removed successfully: {target_folder}")
                shutil.copytree(source_folder, target_folder)
                print(f"Directory copied successfully: {target_folder}")

    except OSError as o:
        print(f"Error, {o.strerror}: {directory}")
# Example usage
folders_to_copy = ['public', 'specs', 'assets']  # List of additional folders to copy
copy_and_replace('example_directory', folders_to_copy)
© www.soinside.com 2019 - 2024. All rights reserved.