工作以来整理的python常用函数,提升工作效率

内容目录

  • 前言
    • 2021年5月13日更新
      • 遍历文件夹(包括子文件夹)
      • 新建文件夹
      • 统计脚本运行时间
      • 内存回收
      • 字符输出,并保留固定位数
      • 时间字符串获取
      • xml文件读取
      • xml文件写入

前言

出于工作的需求,接触了python,但是有一些基础的函数需要反复调用,每次使用的时候都要重新找一遍材料,为了方便自己,就单独记录了一下自己用的一些有用的参数,分享给大家。

2021年5月13日更新

遍历文件夹(包括子文件夹)

这里的遍历是包含子文件夹的完全遍历,
所有的文件完整路径输出在一个列表中,

import os
def get_filelist(dir, Filelist):
    newDir = dir
    if os.path.isfile(dir):
        Filelist.append(dir)
        # # 若只是要返回文件文,使用这个
        # Filelist.append(os.path.basename(dir))
    elif os.path.isdir(dir):
        for s in os.listdir(dir):
            # 如果需要忽略某些文件夹,使用以下代码
            #if s == "xxx":
                #continue
            newDir=os.path.join(dir,s)
            get_filelist(newDir, Filelist)
    return Filelist

新建文件夹

这里新建文件夹是包含一些判断的,如果文件夹已经存在会反馈一个状态
如果文件夹已存在,返回True状态
如果文件夹不存在,新建文件夹并返回False状态

import os
def mkdir(path):
    # 去除首位空格
    path=path.strip()
    # 去除尾部 ‘/’ 符号
    path=path.rstrip("/")
    # 判断路径是否存在
    isExists=os.path.exists(path)  
    # 判断结果
    if not isExists:
        # 如果不存在则创建目录
        # 创建目录操作函数
        os.makedirs(path)  
        print (path+' 创建成功')
        return True
    else:
        # 如果目录存在则不创建,并提示目录已存在
        print (path+' 目录已存在')
        return False

统计脚本运行时间

对时间的统计是每个脚本的调试过程都少不了的,实现途径有很多,以下是我常用的一种方式:

import datetime as dtime
startTime = dtime.datetime.now()
print('用时: {}'.format(dtime.datetime.now() - startTime))

内存回收

因为工作时用图像数据的场景比较多,为了方便程序在计算机上平稳运行,实时采用内存回收是一个很好的解决方式

import gc
# 在collect前搭配 del 函数使用
gc.collect()

字符输出,并保留固定位数

字符输出过程中对位数的控制:

print("%d %.4f" %(full_num[0],full_num[1]))
# 表示保留小数点后4位数

时间字符串获取

每天自动跑程序的时候用得到的函数
可以用时间字符串来确认时间

import datetime as dtime
date = (dtime.datetime.now() + dtime.timedelta(days = -1)).strftime('%Y%m%d') # 获取日期,例:20210305运行,结果为20210304

xml文件读取

使用lxml函数来进行xml文件的读取
如果对于xml格式理解的不好也可以用读取文本文件的方式来完成xml文件读取

from lxml import etree as ET
# path = '/Users/apple/Downloads/test.xml'
dom = etree.parse(path) # parse是一种lxml支持的xml的解析方式
root = dom.getroot()
# root为第一层,root.find为在二级目录中遍历找寻,以此类推
count = root.find("FileBody").find("ReceiveCount").text

xml文件写入

from lxml import etree, objectify
E = objectify.ElementMaker(annotate=False)
anno_tree = E.annotation(
    E.folder('VOC2014_instance'),
    E.filename("test.jpg"),
    E.source(
        E.database('COCO'),
        E.annotation('COCO'),
        E.image('COCO'),
        E.url("http://test.jpg")
    ),
    E.size(
        E.width(800),
        E.height(600),
        E.depth(3)
    ),
    E.segmented(0),
)
# 如果需要在anno_tree的基础上加其他标签的话用append即可:
E2 = objectify.ElementMaker(annotate=False)
anno_tree2 = E2.object(
    E.name("person"),
    E.bndbox(
        E.xmin(100),
        E.ymin(200),
        E.xmax(300),
        E.ymax(400)
    ),
    E.difficult(0)
)
anno_tree.append(anno_tree2) # 将新构建的element加入anno_tree,结合文件读取一起理解更容易
etree.ElementTree(anno_tree).write("text.xml", pretty_print=True)
# 输出新xml

你可能感兴趣的:(Python,python)