浏览量: 95 次浏览

python util文件

2020年2月24日 0 作者 Nie Hen

util包中放一些常用的公共方法,提供一些实用的方法和数据结构
将常用功能封装成为接口,并放入Utils工具类中,直接调用,可以提升效率

文件夹创建
文件夹遍历
批量修改文件名
按照数字顺序改变文件名称 给乱名的图片该名称
xml和jpg文件不完全对应 找出对应的文件并重新保存

文件夹创建

创建文件夹函数提供的功能和扩展,如下:
当文件夹不存在时,创建文件夹;
当文件夹存在时,根据参数,是否删除文件夹;

def mkdir_if_not_exist(dir_name, is_delete=False):
    """
    创建文件夹
    :param dir_name: 文件夹
    :param is_delete: 是否删除
    :return: 是否成功
    """
    try:
        if is_delete:
            if os.path.exists(dir_name):
                shutil.rmtree(dir_name)
                print u'[INFO] 文件夹 "%s" 存在, 删除文件夹.' % dir_name

        if not os.path.exists(dir_name):
            os.makedirs(dir_name)
            print u'[INFO] 文件夹 "%s" 不存在, 创建文件夹.' % dir_name
        return True
    except Exception as e:
        print '[Exception] %s' % e
        return False

文件夹遍历

遍历文件夹函数提供的功能和扩展,如下:

返回文件的路径和名称;
根据后缀名筛选文件;
去除隐藏文件,即以“.”开头的文件;

def traverse_dir_files(root_dir, ext=None):
    """
    列出文件夹中的文件, 深度遍历
    :param root_dir: 根目录
    :param ext: 后缀名
    :return: [文件路径列表, 文件名称列表]
    """
    names_list = []
    paths_list = []
    for parent, _, fileNames in os.walk(root_dir):
        for name in fileNames:
            if name.startswith('.'):  # 去除隐藏文件
                continue
            if ext:  # 根据后缀名搜索
                if name.endswith(tuple(ext)):
                    names_list.append(name)
                    paths_list.append(os.path.join(parent, name))
            else:
                names_list.append(name)
                paths_list.append(os.path.join(parent, name))
    paths_list, names_list = sort_two_list(paths_list, names_list)
    return paths_list, names_list

批量修改文件名

使用前需要修改

# 把 该代码所在的文件目录下的文件
import os
dir = os.getcwd()
for file in os.listdir(dir):
    #print(file)
    if file[-2:]!= 'ss' and file == 'person_xml_2' or file == 'person_jpg':
        #print(file)
        class_ = file.split('_')[0]
        #print(class_)
        path  = dir + os.sep + file
        for class_file in os.listdir(path):
            old_name = path + os.sep + class_file
            new_name = path + os.sep + class_+ class_file
            os.rename(old_name,new_name)
            print(old_name,'-------->>',new_name)

按照数字顺序改变文件名称 给乱名的图片该名称 

import os
import argparse
path = os.getcwd()
list_file = os.listdir(path)
#i = 0
cla = 'mouse_'
parser = argparse.ArgumentParser()
parser.add_argument("--i", type=int, default=0, help="number of epochs")
opt = parser.parse_args()

for file in list_file:
    if file[-2:] != 'py':
        old_name = path + os.sep + file
        file_name = cla + str(opt.i) + '.jpeg'
        new_name = path + os.sep + file_name
        os.rename(old_name,new_name)
        opt.i += 1
        print(file,'-->>',file_name)

xml和jpg文件不完全对应 找出对应的文件并重新保存

import os
import shutil
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--img', type=str, default='n01728572(2)', help='number of epochs')
parser.add_argument('--xml', type=str, default='n01728572', help='number of epochs')
opt = parser.parse_args()

search = opt.img  # 文件多的文件
for_search = opt.xml # 文件少的文件夹
path = os.getcwd()

searched_file = []
exit_file = []

for file in os.listdir(path +os.sep+ search):

    xml_name = file[:-5] + '.xml'
    xml_file = path + os.sep+for_search +os.sep +xml_name # xml文件
    if not os.path.isfile(xml_file): #判断xml文件是否存在
        searched_file.append(file)
    else :
        exit_file.append(file)
print(searched_file)
print(len(searched_file))
print(exit_file)
print(len(exit_file))

mkdir = '/infor_overall'
mkdir1 = '/Annations'
mkdir2 = '/imgs'
if not os.path.exists(path + mkdir): #判断文件夹是否存在
    os.mkdir(path+mkdir)
if not os.path.exists(path  + mkdir +mkdir1):
    os.mkdir(path  + mkdir +mkdir1)
if not os.path.exists(path  + mkdir +mkdir2):
    os.mkdir(path  + mkdir +mkdir2)
for file in exit_file:
    oldimg_path = path+os.sep+search+os.sep+file
    newimg_path = path+mkdir+mkdir2+os.sep+file
    oldxml_path = path+os.sep+for_search+os.sep+file[:-5] + '.xml'
    newxml_path = path+mkdir+mkdir1+os.sep+file[:-5] + '.xml'  # 复制后的路径加上一样的命名
    shutil.copyfile(oldimg_path,newimg_path)
    shutil.copyfile(oldxml_path,newxml_path) #复制文件 两个参数都是路径加上文件名
print('移动文件完成')