|
|
import os
|
|
|
import random
|
|
|
import shutil
|
|
|
from tqdm import tqdm
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def move_n_random_files(dir1: str, dir2: str, n: int) -> bool:
|
|
|
"""
|
|
|
Desc:
|
|
|
This method moves 'n' random files from the source directory (dir1) to destination directory (dir2).
|
|
|
Args:
|
|
|
dir1 (str): Path to the source directory.
|
|
|
dir2 (str): Path to the destination directory.
|
|
|
n (int): The number of random files to be moved.
|
|
|
Returns:
|
|
|
True, if the operation was successful, otherwise False.
|
|
|
"""
|
|
|
try:
|
|
|
|
|
|
if not os.path.isdir(dir1):
|
|
|
print(f"Directory '{dir1}' does not exist.")
|
|
|
return False
|
|
|
|
|
|
if not os.path.isdir(dir2):
|
|
|
print(f"Directory '{dir2}' does not exist. Creating it.")
|
|
|
os.makedirs(dir2)
|
|
|
|
|
|
|
|
|
all_files = [f for f in os.listdir(dir1) if os.path.isfile(os.path.join(dir1, f))]
|
|
|
|
|
|
if len(all_files) < n:
|
|
|
print(f"Cannot move '{n}' files, directory only contains '{len(all_files)}' files.")
|
|
|
return False
|
|
|
|
|
|
files_to_move = random.sample(all_files, n)
|
|
|
|
|
|
for file in tqdm(files_to_move):
|
|
|
source_path = os.path.join(dir1, file)
|
|
|
destination_path = os.path.join(dir2, file)
|
|
|
|
|
|
|
|
|
shutil.move(source_path, destination_path)
|
|
|
|
|
|
return True
|
|
|
|
|
|
except Exception as move_ex:
|
|
|
print(f"Error occurred while moving files: {str(move_ex)}.")
|
|
|
return False
|
|
|
|
|
|
|
|
|
def copy_n_random_files(dir1: str, dir2: str, n: int) -> bool:
|
|
|
"""
|
|
|
Desc:
|
|
|
Randomly select and copy 'n' files from one directory to another.
|
|
|
Args:
|
|
|
dir1 (str): Path to the source directory.
|
|
|
dir2 (str): Path to the destination directory. Will be created if it doesn't exist.
|
|
|
n (int): Number of files to randomly copy.
|
|
|
Returns:
|
|
|
bool: True if the operation was successful, False otherwise.
|
|
|
"""
|
|
|
try:
|
|
|
|
|
|
if not os.path.isdir(dir1):
|
|
|
print(f"Directory '{dir1}' does not exist.")
|
|
|
return False
|
|
|
|
|
|
|
|
|
if not os.path.isdir(dir2):
|
|
|
print(f"Directory '{dir2}' does not exist. Creating it.")
|
|
|
os.makedirs(dir2)
|
|
|
|
|
|
|
|
|
all_files = [f for f in os.listdir(dir1) if os.path.isfile(os.path.join(dir1, f))]
|
|
|
|
|
|
if len(all_files) < n:
|
|
|
n = len(all_files)
|
|
|
|
|
|
print(f"Copying '{n}' files to '{dir2}'...")
|
|
|
files_to_copy = random.sample(all_files, n)
|
|
|
|
|
|
for file in tqdm(files_to_copy, desc="Copying files"):
|
|
|
source_path = os.path.join(dir1, file)
|
|
|
destination_path = os.path.join(dir2, file)
|
|
|
shutil.copy(source_path, destination_path)
|
|
|
|
|
|
return True
|
|
|
|
|
|
except Exception as copy_ex:
|
|
|
print(f"Error occurred while copying files: {str(copy_ex)}.")
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def copy_n_unique_files(dir1, dir2, output_dir, n):
|
|
|
"""
|
|
|
Desc:
|
|
|
This method iterates files in dir1 and checks if they are not present in dir2. If not present, copies the file to output_dir. Moves 'n' files in total.
|
|
|
Args:
|
|
|
dir1 (str): Path to directory 1.
|
|
|
dir2 (str): Path to directory 2.
|
|
|
output_dir (str): Path to the destination directory.
|
|
|
n (int): The number of random files to be moved.
|
|
|
Returns:
|
|
|
True, if the operation was successful, otherwise False.
|
|
|
"""
|
|
|
try:
|
|
|
|
|
|
dir1_files = [f for f in os.listdir(dir1) if os.path.isfile(os.path.join(dir1, f))]
|
|
|
dir2_files = [f for f in os.listdir(dir2) if os.path.isfile(os.path.join(dir2, f))]
|
|
|
|
|
|
|
|
|
unique_files = [f for f in dir1_files if f not in dir2_files]
|
|
|
|
|
|
|
|
|
if not unique_files:
|
|
|
print("No unique files to move.")
|
|
|
return False
|
|
|
|
|
|
|
|
|
files_to_copy = random.sample(unique_files, min(n, len(unique_files)))
|
|
|
|
|
|
|
|
|
files_copied = 0
|
|
|
for file in files_to_copy:
|
|
|
src_path = os.path.join(dir1, file)
|
|
|
dest_path = os.path.join(output_dir, file)
|
|
|
shutil.copy(src_path, dest_path)
|
|
|
files_copied += 1
|
|
|
print(f"Copied: {file}")
|
|
|
|
|
|
print(f"Total files copied: {files_copied}")
|
|
|
return True
|
|
|
|
|
|
except Exception as copy_ex:
|
|
|
print(f"An error occurred while copying: {copy_ex}")
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
dir1 = ""
|
|
|
dir2 = ""
|
|
|
n = 0
|
|
|
|
|
|
move_n_random_files(dir1, dir2, n) |