1. 创建文件夹
import os
1. 创建文件夹
os.makedirs(new_dir)
实例:
os.makedirs("./data")
函数:
def makedir(new_dir):
if not os.path.exists(new_dir):
os.makedirs(new_dir)
2. 目录与路径拼接
import os
1. 返回当前目录
os.getcwd()
2. 判断路径是否为目录
os.path.isdir(path)
3. 判断路径是否为文件
os.path.isfile(path)
4. 路径拼接
os.path.join(path)
实例:
os.path.join("..","data", "RMB_data")
'../data/RMB_data'
5. 获取路径下的文件名列表,返回列表形式
os.listdir(path)
实例:
os.listdir(os.path.join("..", "data"))
['0NP96EGY.jpg', '0GRZFSDG.jpg', '08C3EHPG.jpg', '0DRZXTK3.jpg', '0GPYRDQM.jpg', '01LNYXO4.jpg', '073LW92O.jpg', '0OFE6MSI.jpg', '0FA8LD9Z.jpg', '0MNY59BW.jpg']
3. 遍历目录与子文件
os.walk方法,主要用来遍历一个目录内各个子目录和子文件
语法:
os.walk(top)
top -- 是你所要遍历的目录的地址
功能:
os.walk(top) 返回的是一个三元组(root,dirs,files)
参数:
- root 所指的是当前正在遍历的这个文件夹的本身的地址
- dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
- files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
实例:
for root, dirs, files in os.walk( dataset_dir ):
print(root)
print(dirs)
print(files)
/home/guofeng/桌面/pytorch学习/DataLoader/split_data/test_data
['1', '100']
[]
/home/guofeng/桌面/pytorch学习/DataLoader/split_data/test_data/1
[]
['0NP96EGY.jpg', '0GRZFSDG.jpg', '08C3EHPG.jpg', '0DRZXTK3.jpg', '0GPYRDQM.jpg', '01LNYXO4.jpg', '073LW92O.jpg', '0OFE6MSI.jpg', '0FA8LD9Z.jpg', '0MNY59BW.jpg']
/home/guofeng/桌面/pytorch学习/DataLoader/split_data/test_data/100
[]
['04W3GHSB.jpg', '0LIKD2CE.jpg', '02OE5LH4.jpg', '05NY9E4L.jpg', '0WRGMZ5Y.jpg', '0PDHIO85.jpg', '0NR17KZY.jpg', '06NEIRC4.jpg', '0R6X4SO8.jpg', '0ZA9M8E2.jpg']
4. 过滤序列后缀
功能:
用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表.
语法:
filter(function, iterable)
第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中.
实例:
imgs = os.listdir(os.path.join(root, sub_dir))
imgs = list( filter( lambda x: x.endswith('.jpg'), imgs ) )
其中, endswith() 方法用于判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False
5. copy文件
import shutil
copy文件函数:
shutil.copy(src_path, target_path)
参数:
src_path 表示原始文件(包含路径);
target_path表示目标文件(包含路径);
实例:
src_path = os.path.join("/home/wind/src_data/1.jpg")
target_path = os.path.join("/home/wind/target_data/1.jpg")
shutil.copy(src_path, target_path)
6. 数据分割实例
import os
import random
import shutil
random.seed(1)
def makedir(new_dir):
if not os.path.exists(new_dir):
os.makedirs(new_dir)
if __name__ == "__main__":
dataset_dir = os.path.join("..", "data", "RMB_data")
split_dir = os.path.join(".", "split_data")
train_dir = os.path.join(split_dir, "train_data")
vaild_dir = os.path.join(split_dir, "vaild_data")
test_dir = os.path.join(split_dir, "test_data")
train_pct = 0.7
vaild_pct = 0.2
test_pct = 0.1
for root, dirs, files in os.walk( dataset_dir ):
for sub_dir in dirs:
imgs = os.listdir(os.path.join(root, sub_dir))
imgs = list( filter( lambda x: x.endswith('.jpg'), imgs ) )
random.shuffle(imgs)
img_count = len(imgs)
train_point = int(img_count * train_pct)
vaild_point = int(img_count * vaild_pct)
for i in range(img_count):
if i < train_point:
out_dir = os.path.join(train_dir, sub_dir)
elif i < (train_point + vaild_point):
out_dir = os.path.join(vaild_dir, sub_dir)
else :
out_dir = os.path.join(test_dir, sub_dir)
makedir(out_dir)
src_path = os.path.join(root, sub_dir, imgs[i])
target_path = os.path.join(out_dir, imgs[i])
shutil.copy(src_path, target_path)