import os
import shutil
import math
def redistribute_files(source_dir, target_dir):
# 获取源目录中的所有子目录
subdirectories = [os.path.join(source_dir, d) for d in os.listdir(source_dir) if os.path.isdir(os.path.join(source_dir, d))]
for subdirectory in subdirectories:
# 获取每个子目录中的文件列表
files = [f for f in os.listdir(subdirectory) if os.path.isfile(os.path.join(subdirectory, f))]
num_files = len(files)
# 检查文件数量是否超过256
if num_files > 256:
multiplier = math.ceil(num_files / 256)
print(f"{subdirectory} has {num_files} files, which is {multiplier} times more than 256.")
# 创建目标目录,如果它不存在
new_target_dir = os.path.join(target_dir, os.path.basename(subdirectory))
if not os.path.exists(new_target_dir):
os.makedirs(new_target_dir)
# 创建新的子文件夹并分配文件
for i, file in enumerate(files):
subfolder = os.path.join(new_target_dir, f"subfolder_{i // 256 + 1}")
if not os.path.exists(subfolder):
os.makedirs(subfolder)
shutil.copy(os.path.join(subdirectory, file), subfolder)
print(f"Files have been redistributed into {multiplier} folders under {new_target_dir}.")
else:
print(f"No need to redistribute. The number of files in {subdirectory} is {num_files}, which is not over 256.")
# 示例用法
source_directory = 'path_to_your_source_directory'
target_directory = 'path_to_your_target_directory'
redistribute_files(source_directory, target_directory)
import os
import shutil
import math
def redistribute_files(source_dir, target_dir, image_dir):
# 获取源目录中的所有子目录
subdirectories = [os.path.join(source_dir, d) for d in os.listdir(source_dir) if
os.path.isdir(os.path.join(source_dir, d))]
for subdirectory in subdirectories:
# 获取每个子目录中的文件列表
files = [f for f in os.listdir(subdirectory) if os.path.isfile(os.path.join(subdirectory, f))]
num_files = len(files)
# 检查文件数量是否超过256
if num_files > 256:
basename = os.path.basename(subdirectory)
multiplier = math.ceil(num_files / 256)
print(f"{subdirectory} has {num_files} files, which is {multiplier} times more than 256.")
# 创建目标目录,如果它不存在
new_target_dir = os.path.join(target_dir, basename)
if not os.path.exists(new_target_dir):
os.makedirs(new_target_dir)
# 查找同名的 PNG 文件
png_file_path = os.path.join(image_dir, basename + '.png')
if os.path.exists(png_file_path):
# 创建新的子文件夹并分配文件
for i, file in enumerate(files):
subfolder = new_target_dir if i // 256 == 0 else new_target_dir + '_copy' + str(i // 256)
if not os.path.exists(subfolder):
os.makedirs(subfolder)
shutil.copy(os.path.join(subdirectory, file), subfolder)
if i % 256 == 0: # 每256个文件复制一次PNG文件
png_target_path = os.path.join(subfolder, basename + '.png')
shutil.copy(png_file_path, png_target_path)
print(f"Files and associated PNG have been redistributed into {multiplier} folders under {new_target_dir}.")
else:
print(f"No PNG file found for {basename}.")
else:
print(f"No need to redistribute. The number of files in {subdirectory} is {num_files}, which is not over 256.")
# 示例用法
source_directory = '/media/wagnchogn/D/path_sam/0513/CoNSeP/test_mask'
target_directory = '/media/wagnchogn/D/path_sam/0513/CoNSeP/test_mask (copy)'
image_directory = '/media/wagnchogn/D/path_sam/0513/CoNSeP/test_img'
redistribute_files(source_directory, target_directory, image_directory)
import pandas as pd
import os
import shutil
import math
# 读取CSV文件
csv_path = '/mnt/data/max_files.csv' # 替换成你的文件路径
df = pd.read_csv(csv_path)
# 筛选datasets列为'consep'的行
consep_files = df[df['datasets'] == 'consep']
# 任务相关的目录
source_dir = '/media/wagnchogn/D/path_sam/0513/CoNSeP/test_mask'
target_dir = '/media/wagnchogn/D/path_sam/0513/CoNSeP/test_mask (copy)'
image_dir = '/media/wagnchogn/D/path_sam/0513/CoNSeP/test_img'
# 遍历找到的文件名
for file_name in consep_files['file_name']:
folder_path = os.path.join(source_dir, file_name)
if os.path.exists(folder_path):
files = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))]
num_files = len(files)
# 检查是否需要处理文件
if num_files > 256:
files_to_move = files[256:] # 需要移动的文件
num_moves = math.ceil(len(files_to_move) / 256)
# 移动文件
for i in range(num_moves):
new_folder = os.path.join(target_dir, f'{file_name}_extra_{i+1}')
os.makedirs(new_folder, exist_ok=True)
for file in files_to_move[i*256:(i+1)*256]:
shutil.move(os.path.join(folder_path, file), new_folder)
# 处理图像文件
image_path = os.path.join(image_dir, file_name + '.png')
if os.path.isfile(image_path):
for i in range(num_moves + 1):
new_image_folder = os.path.join(image_dir, f'{file_name}_copy_{i+1}')
os.makedirs(new_image_folder, exist_ok=True)
shutil.copy(image_path, os.path.join(new_image_folder, file_name + '.png'))
print(f"Processed {file_name}: files moved and images copied.")
else:
print(f"No need to process {file_name}, file count is within limit.")
else:
print(f"Directory {folder_path} does not exist.")