这就是我将文件夹
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}")
是否可以使用文件夹名称列表并迭代这些项目来检查源中是否存在文件夹,以及是否存在将其复制到目标工作区?
当然可以
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:
是的,这是可能的。
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)