liguang0115's picture
Add initial project structure with core files, configurations, and sample images
2df809d
import os
import shutil
from tqdm import tqdm
# Set these paths to your original and moved locations.
src_base = "/path/to/processed_dl3dv" # original location
dst_base = "processed_dl3dv_ours" # current (moved) location
# Set dry_run to True for testing (no changes made), and False to perform the actions.
dry_run = False
def merge_directories(source_dir, destination_dir, dry_run=False):
"""
Merge all contents from source_dir into destination_dir.
If an item already exists in destination_dir:
- For files: remove the destination file and move the source file.
- For directories: merge them recursively.
After moving items, empty directories are removed.
"""
for item in os.listdir(source_dir):
source_item = os.path.join(source_dir, item)
dest_item = os.path.join(destination_dir, item)
if os.path.isdir(source_item):
if os.path.exists(dest_item):
# Recursively merge subdirectories.
merge_directories(source_item, dest_item, dry_run=dry_run)
# Remove the source subdirectory if empty.
if not os.listdir(source_item):
if dry_run:
print(f"[Dry-run] Would remove empty directory: {source_item}")
else:
os.rmdir(source_item)
else:
if dry_run:
print(f"[Dry-run] Would move directory: {source_item} -> {dest_item}")
else:
shutil.move(source_item, dest_item)
else:
# For files: if a file already exists at the destination, remove it.
if os.path.exists(dest_item):
if dry_run:
print(f"[Dry-run] Would remove existing file: {dest_item}")
else:
os.remove(dest_item)
if dry_run:
print(f"[Dry-run] Would move file: {source_item} -> {dest_item}")
else:
shutil.move(source_item, dest_item)
# Build a list of relative folder paths in dst_base.
# This assumes the structure is: dst_base/f1/f2
all_folders = []
for f1 in os.listdir(dst_base):
f1_path = os.path.join(dst_base, f1)
if not os.path.isdir(f1_path):
continue
for f2 in os.listdir(f1_path):
all_folders.append(os.path.join(f1, f2))
# Process each folder and move/merge it back to the original location.
for folder in tqdm(all_folders, desc="Moving folders back"):
original_folder = os.path.join(src_base, folder) # target location in the original path
moved_folder = os.path.join(dst_base, folder) # current location
# Ensure the parent directory of the original folder exists.
parent_dir = os.path.dirname(original_folder)
if dry_run:
if not os.path.exists(parent_dir):
print(f"[Dry-run] Would create directory: {parent_dir}")
else:
os.makedirs(parent_dir, exist_ok=True)
if not os.path.exists(original_folder):
if dry_run:
print(f"[Dry-run] Would move folder: {moved_folder} -> {original_folder}")
else:
shutil.move(moved_folder, original_folder)
else:
merge_directories(moved_folder, original_folder, dry_run=dry_run)
# Remove the moved folder if it becomes empty.
if not os.listdir(moved_folder):
if dry_run:
print(f"[Dry-run] Would remove empty directory: {moved_folder}")
else:
os.rmdir(moved_folder)