clean_files清除文件

该博客介绍了一个Python脚本,用于在指定目录及其子目录下删除以log、JPG、PNG和tar.gz为后缀的文件。通过argparse模块接收命令行参数,并使用fnmatch模块匹配文件名,实现清理功能。

 为了清除冗余的log、JPG、png、tar.gz后缀的文件,在特定的目录下。

# -*- coding: utf-8 -*-

import argparse
import fnmatch
import os
import sys


def clean_files(patterns):
    root_dir = os.path.dirname(os.path.abspath(__file__))
    clean_files_by_patterns(root_dir, patterns)
    for item in os.listdir(root_dir):
        if item.endswith("test") or item.endswith("plan") or item.endswith("lib"):
            item_path = os.path.join(root_dir, item)
            if os.path.isdir(item_path):
                clean_files_by_patterns(item_path, patterns)


def clean_files_by_patterns(dir_path, patterns):
    for temp_dir, _, file_names in os.walk(dir_path):
        for file_name in file_names:
            for patter

""" 我有一个images文件夹,里面放有10张图 1.jpg 2.jpg.... 我希望按照 8:1:1的比例分到3个不同的文件夹 train,val,test 每个文件夹还得有自己的label.txt 记录文件夹里的图片名称 """ from pathlib import Path import shutil import random # 1.定义路径及清除旧目录,创建目录 def clean_dir(path): if path.exists(): shutil.rmtree(path) path.mkdir(exist_ok=True) images_dir = Path("images") train_dir = Path("train") test_dir = Path("test") val_dir = Path("val") for path in [train_dir, test_dir, val_dir]: clean_dir(path) # 2.获取所有图片打乱顺序 file_list = list(images_dir.glob("*.jpg")) random.shuffle(file_list) # 3.按比例分配 total = len(file_list) # 训练集 train_split = int(total * 0.8) # [1,2,3,4,5,6,7,8,9,10] ==> [0:8] ==> [1,2,3,4,5,6,7,8] train_files = file_list[:train_split] # 测试集 test_split = train_split + int(total * 0.1) # [1,2,3,4,5,6,7,8,9,10] ==> [8:9] ==> [9] test_files = file_list[train_split:test_split] # 验证集 # [1,2,3,4,5,6,7,8,9,10] ==> [:] ==> [10] val_files = file_list[test_split:] # 定义通用的函数 def copy_and_record(files: list, target_dir: Path): """ 复制图片并记录信息 :param files: 要复制图片列表 :param target_dir: 目标路径 :return: None """ label_file = target_dir / "label.txt" label_file.write_text("") with open(label_file, "a") as f: for file in files: shutil.copy2(file, target_dir) f.write(f"{file.name}\n") copy_and_record(train_files, train_dir) copy_and_record(test_files, test_dir) copy_and_record(val_files, val_dir) 这个代码为什么这么写,一步步逻辑和意思是什么?
08-20
int tp_disk_format_special(struct disk *disk) { int ret = 0; int i = 0; int fd = -1; enum storage_data_type type = 0; struct partition *partition = NULL; const struct partition_spec *spec = NULL; char clean_buf[CLEAN_DATA_SIZE] = {0}; char filename[STM_PATH_MAX] = {0}; char data_path[STM_PATH_MAX] = {0}; #ifdef NAMING_FILE_WITH_TIME struct timespan ts = {0, 0}; #endif if (disk == NULL || disk->id > MAX_DISK_NUM) { STM_ERROR("This disk have been deleted."); return -1; } formatted_exec("umount %s", disk->mnt_info.mount_dir); ret = do_format_with_create_data_file(disk->mnt_info.disk_dir, partition); formatted_exec("mount -o usefree %s %s", disk->mnt_info.disk_dir, disk->mnt_info.mount_dir); if (ret < 0) { STM_ERROR("do_format_with_create_data_file failed."); return ret; } ret = get_data_path(&disk->mnt_info, data_path, sizeof(data_path)); if (ret != 0) { STM_ERROR("fail to get data path."); return -1; } disk->simulated_percent = DISK_FORMAT_PERCENT + DATA_FILE_FORMAT_PERCENT / 2; FOREACH_STORAGE_TYPE(type) { if (!if_storage_type_supported(type)) { continue; } partition = get_partition(disk->id, type); if (!partition || !partition->enabled) { continue; } spec = get_partition_spec(type); if (!spec || !spec->data_postfix) { continue; } STM_INFO("write zero to %u %s files(disk type: %s)...", partition->files_info.data_file_num, spec->data_postfix, disk->mnt_info.type == DISK_TYPE_LOCAL ? "local" : "remote"); for(i = 0; i < partition->files_info.data_file_num; i++) { #ifdef NAMING_FILE_WITH_TIME if (STORAGE_TYPE_VIDEO == type) { ts.start_time = 0; ts.end_time = 0; ret = get_data_file_name_with_time(i, &ts, spec->data_postfix, filename, sizeof(filename)); } else #endif { ret = get_data_file_name(i, spec->data_postfix, filename, sizeof(filename)); } if (ret < 0) continue; fd = open_file_path(data_path, filename, O_RDWR); if (fd < 0) { STM_ERROR("fail to open file %s/%s: %s", data_path, filename, strerror(errno)); return -1; } /*预分配空间后,将文件前8个字节(ftyp box的前两个字段)清除,避免格式化后文件仍可播*/ #ifdef PASSENGER_FLOW_SUPPORT if (type == STORAGE_TYPE_PASSENGER_FLOW) { if (write_version(fd, PF_VERSION) == -1) { STM_WARN("pf file version writes successed"); } if (clean_data_file(fd, VERSION_LEN, (PASSENGER_FLOW_FILE_SIZE+VERSION_LEN)) == -1) { STM_WARN("pf_data file clean failed"); } if (-1 == write_data_checksum(fd)) { STM_WARN("fail to write csc"); } } else #endif /*预分配空间后,将文件前8个字节(ftyp box的前两个字段)清除,避免格式化后文件仍可播*/ { write(fd, clean_buf, sizeof(clean_buf)); } close(fd); /*为客流量数据增加备份机制*/ #ifdef PASSENGER_FLOW_SUPPORT if (STORAGE_TYPE_PASSENGER_FLOW == type) { create_backup_data_block_files(disk, partition->files_info.data_file_num, type, partition->files_info.data_file_size); } #endif } } return ret; }代码功能
最新发布
11-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值