os.listdir的随机性

python有一个列出特定目录下所有文件名的函数os.listdir,输入是文件夹名,输出是当前文件夹下所有的文件名,以List的形式展现。

值得注意的是,os.listdir输出的list是无序的,在不同设备下,输出的顺序可能不一样!!!

为了避免这种随机性,可以使用sorted函数进行排序,保证输出的顺序。

import os
listdir = lambda f: sorted(os.listdir(f))
# by 优快云 迪菲赫尔曼 import os import random import shutil def copy_files(src_dir, dst_dir, filenames, extension): os.makedirs(dst_dir, exist_ok=True) missing_files = 0 for filename in filenames: src_path = os.path.join(src_dir, filename + extension) dst_path = os.path.join(dst_dir, filename + extension) # Check if the file exists before copying if os.path.exists(src_path): shutil.copy(src_path, dst_path) else: print(f"Warning: File not found for {filename}") missing_files += 1 return missing_files def split_and_copy_dataset(image_dir, label_dir, output_dir, train_ratio=0.7, valid_ratio=0.15, test_ratio=0.15): # 获取所有图像文件的文件名(不包括文件扩展名) image_filenames = [os.path.splitext(f)[0] for f in os.listdir(image_dir)] # 随机打乱文件名列表 random.shuffle(image_filenames) # 计算训练集、验证集和测试集的数量 total_count = len(image_filenames) train_count = int(total_count * train_ratio) valid_count = int(total_count * valid_ratio) test_count = total_count - train_count - valid_count # 定义输出文件夹路径 train_image_dir = os.path.join(output_dir, 'train', 'images') train_label_dir = os.path.join(output_dir, 'train', 'labels') valid_image_dir = os.path.join(output_dir, 'valid', 'images') valid_label_dir = os.path.join(output_dir, 'valid', 'labels') test_image_dir = os.path.join(output_dir, 'test', 'images') test_label_dir = os.path.join(output_dir, 'test', 'labels') # 复制图像和标签文件到对应的文件夹 train_missing_files = copy_files(image_dir, train_image_dir, image_filenames[:train_count], '.jpg') train_missing_files += copy_files(label_dir, train_label_dir, image_filenames[:train_count], '.txt') valid_missing_files = copy_files(image_dir, valid_image_dir, image_filenames[train_count:train_count + valid_count], '.jpg') valid_missing_files += copy_files(label_dir, valid_label_dir, image_filenames[train_count:train_count + valid_count], '.txt')
03-23
``` import os import shutil from sklearn.model_selection import train_test_split import pandas as pd # 定义源目录路径 source_folder = 'C:/Users\Lenovo\Desktop\crcw不同端12k在0负载下\风扇端' subfolders = ["内圈故障", "球故障"] # 创建目标文件夹结构 target_folders = { 'train': '训练集', 'val': '验证集', 'test': '测试集' } os.makedirs('划分后的数据', exist_ok=True) for key, folder in target_folders.items(): for subfolder in subfolders: path = os.path.join('划分后的数据', folder, subfolder) os.makedirs(path, exist_ok=True) # 遍历每个子文件夹并读取CSV文件 all_data = [] for subfolder in subfolders: folder_path = os.path.join(source_folder, subfolder) files = [f for f in os.listdir(folder_path) if f.endswith('.csv')] # 将所有数据加载到列表中 for file in files: data = pd.read_csv(os.path.join(folder_path, file)) all_data.append((data, subfolder)) # 划分数据集 train_val, test = train_test_split(all_data, test_size=0.2, random_state=42) train, val = train_test_split(train_val, test_size=0.25, random_state=42) # 即最终比例为6:2:2 # 移动文件至对应的目标文件夹 def move_files(data_list, target_dir): for data, label in data_list: filename = f"{label}_{hash(str(data.iloc[0].values))}.csv" # 确保唯一性 save_path = os.path.join(target_folders[target_dir], label, filename) data.to_csv(save_path, index=False) move_files(train, 'train') move_files(val, 'val') move_files(test, 'test') print("数据集已成功划分为训练集、验证集和测试集!")```可以分析一下这段代码吗
最新发布
03-29
以以下代码为基础,绘制图片来 显示数据增强的过程和结果:def flip(root_path,img_name): #翻转图像 img = Image.open(os.path.join(root_path, img_name)) filp_img = img.transpose(Image.FLIP_LEFT_RIGHT) # filp_img.save(os.path.join(root_path,img_name.split('.')[0] + '_flip.jpg')) return filp_img def rotation(root_path, img_name): img = Image.open(os.path.join(root_path, img_name)) rotation_img = img.rotate(20) #旋转角度 # rotation_img.save(os.path.join(root_path,img_name.split('.')[0] + '_rotation.jpg')) return rotation_img def randomColor(root_path, img_name): #随机颜色 """ 对图像进行颜色抖动 :param image: PIL的图像image :return: 有颜色色差的图像image """ image = Image.open(os.path.join(root_path, img_name)) random_factor = np.random.randint(0, 31) / 10. # 随机因子 color_image = ImageEnhance.Color(image).enhance(random_factor) # 调整图像的饱和度 random_factor = np.random.randint(10, 21) / 10. # 随机因子 brightness_image = ImageEnhance.Brightness(color_image).enhance(random_factor) # 调整图像的亮度 random_factor = np.random.randint(10, 21) / 10. # 随机因子 contrast_image = ImageEnhance.Contrast(brightness_image).enhance(random_factor) # 调整图像对比度 random_factor = np.random.randint(0, 31) / 10. # 随机因子 return ImageEnhance.Sharpness(contrast_image).enhance(random_factor) # 调整图像锐度 def contrastEnhancement(root_path, img_name): # 对比度增强 image = Image.open(os.path.join(root_path, img_name)) enh_con = ImageEnhance.Contrast(image) contrast = 1.5 image_contrasted = enh_con.enhance(contrast) return image_contrasted def brightnessEnhancement(root_path,img_name):#亮度增强 image = Image.open(os.path.join(root_path, img_name)) enh_bri = ImageEnhance.Brightness(image) brightness = 1.5 image_brightened = enh_bri.enhance(brightness) return image_brightened def colorEnhancement(root_path,img_name):#颜色增强 image = Image.open(os.path.join(root_path, img_name)) enh_col = ImageEnhance.Color(image) color = 1.5 image_colored = enh_col.enhance(color) return image_colored from PIL import Image from PIL import ImageEnhance import os #import cv2 import numpy as np imageDir="./test/0" #要改变的图片的路径文件夹 saveDir="./new" #要保存的图片的路径文件夹 for name in os.listdir(imageDir): saveName= name[:-4]+"id.jpg" image = Image.open(os.path.join(imageDir, name)) image.save(os.path.join(saveDir,saveName)) saveName= name[:-4]+"be.jpg" saveImage=brightnessEnhancement(imageDir,name) saveImage.save(os.path.join(saveDir,saveName)) saveName= name[:-4]+"fl.jpg" saveImage=flip(imageDir,name) saveImage.save(os.path.join(saveDir,saveName)) saveName= name[:-4]+"ro.jpg" saveImage=rotation(imageDir,name) saveImage.save(os.path.join(saveDir,saveName))
05-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值