Python Utils

2023-11-02

在Python开发中,将常用功能封装成为接口,并放入Utils工具类中,直接调用,可以提升效率。

常用的函数有:

  • 文件夹遍历
  • 文件夹创建
  • 文件读取
  • 时间可读
  • 时间统计
  • 安全除法
  • 双列表排序
  • 配置读取
  • 脚本路径
  • Numpy判空

文件夹遍历

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

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

实现:

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
复制代码

文件夹创建

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

  1. 当文件夹不存在时,创建文件夹;
  2. 当文件夹存在时,根据参数,是否删除文件夹;

实现:

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
复制代码

文件读取

文件读取函数提供的功能和扩展,如下:

  • 实现便捷地文件读取功能;
  • 当参数mode是one时,读取1行;
  • 当参数mode是more时,读取多行;

实现:

def read_file(data_file, mode='more'):
    """
    读文件, 原文件和数据文件
    :return: 单行或数组
    """
    try:
        with open(data_file, 'r') as f:
            if mode == 'one':
                output = f.read()
                return output
            elif mode == 'more':
                output = f.readlines()
                return map(str.strip, output)
            else:
                return list()
    except IOError:
        return list()
复制代码

时间可读

可读时间函数提供的功能和扩展,如下:

  • 输入时间戳(如time.time()),输出可读时间str
  • 输出格式是年-月-日 时:分:秒

实现:

def timestamp_2_readable(time_stamp):
    """
    时间戳转换为可读时间
    :param time_stamp: 时间戳,当前时间:time.time()
    :return: 可读时间字符串
    """
    return datetime.fromtimestamp(time_stamp).strftime('%Y-%m-%d %H:%M:%S')
复制代码

时间统计

时间统计函数提供的功能和扩展,如下:

  1. 显示起始和结束时间;
  2. 统计执行的数,可以用于统计单次耗时;

实现:

start_time = datetime.now()  # 起始时间
print "[INFO] 当前时间: %s" % timestamp_2_readable(time.time())

time.sleep(10)

print "[INFO] 结束时间: %s" % timestamp_2_readable(time.time())
elapsed_time = (datetime.now() - start_time).total_seconds()  # 终止时间
print "[INFO] 耗时: %s (秒)" % elapsed_time
复制代码

安全除法

安全除法函数提供的功能和扩展,如下:

  1. 基本的除法功能;
  2. 转换为浮点数(float);
  3. 避免除数为0,当除数为0时,直接返回0.0;

实现:

def safe_div(x, y):
    """
    安全除法
    :param x: 被除数 
    :param y: 除数
    :return: 结果
    """
    x = float(x)
    y = float(y)
    if y == 0.0:
        return 0.0
    else:
        return x / y
复制代码

双列表排序

双列表排序函数提供的功能和扩展,如下:

  1. 同时排序列表1和列表2;
  2. 两个列表的对应顺序不变;

实现:

def sort_two_list(list1, list2):
    """
    排序两个列表
    :param list1: 列表1
    :param list2: 列表2
    :return: 排序后的两个列表
    """
    list1, list2 = (list(t) for t in zip(*sorted(zip(list1, list2))))
    return list1, list2
复制代码

配置读取

配置读取函数提供的功能和扩展,如下:

  • 配置文件是JSON格式;
  • 配置文件转换为配置类配置字典

实现:

import json
from bunch import Bunch

def get_config_from_json(json_file):
    """
    将配置文件转换为配置类
    :param json_file: json文件
    :return: 配置信息
    """
    with open(json_file, 'r') as config_file:
        config_dict = json.load(config_file)  # 配置字典
    config = Bunch(config_dict)  # 将配置字典转换为类
    return config, config_dict
复制代码

Numpy判空

  • 空的NdArray可以用于异常处理;
  • 当NdArray的属性size值为0时,NdArray为空。
import numpy as np
a = np.array([])
print a.size # 0
复制代码

脚本路径

当执行Python脚本时,路径未包含当前工程,需要强制指定文件夹位置(dirname),否则无法找到同工程中的其他类。

以下是二层路径的实现,当层次较多时,嵌套多次os.path.dirname即可。

p = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
if p not in sys.path:
    sys.path.append(p)
复制代码

欢迎Follow我的GitHub:https://github.com/SpikeKing

By C. L. Wang

That's all! Enjoy it!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python Utils 的相关文章

  • Vimeo API:获取下载所有视频文件的链接列表

    再会 我正在尝试从 Vimeo 帐户获取所有视频文件的列表 直接下载的链接 有没有办法在 1 GET 请求中做到这一点 好的 如果是API限制的话 就100倍 我有硬编码脚本 我在其中发出 12 个 GET 请求 1100 多个视频 根据文
  • 为什么 Mypy 在 __init__ 中分配已在类主体中进行类型提示的属性时不给出键入错误?

    这是我的示例 python 文件 class Person name str age int def init self name age self name name self age age p Person 5 5 但当我跑步时myp
  • Flask-SocketIO redis 订阅

    我在用着https github com miguelgrinberg Flask SocketIO https github com miguelgrinberg Flask SocketIO实现 WebSocket 服务器 我需要从另一
  • 在函数内的 for 循环上使用 tqdm 来检查进度

    我正在使用 for 循环迭代目录树内的一大组文件 这样做时 我想通过控制台中的进度条来监视进度 因此 我决定使用 tqdm 来实现此目的 目前 我的代码如下所示 for dirPath subdirList fileList in tqdm
  • App Engine 上的 Django 与 webapp2 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何同时运行多个功能[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有以下代码 my func1 my func2 my func3 my func4 my func5 是否可以同时计算函数的数据 而
  • pyCUDA无法打印结果

    最近 我使用 pip 为我的 python3 4 3 安装 pyCUDA 但我在测试示例代码时发现 https documen tician de pycuda tutorial html getting started https doc
  • 如果 Row1 = 值 1,则更新其他行

    我有一个小的 php 脚本 用于访问 mySql 数据库 我想在数据库中插入新记录之前查看该数字 值 1 是否等于数据库中的记录 这也在第 1 行 所以我想 查看传入的电话号码是否等于数据库中的电话号码 如果是这样 则必须保持电话号码相同的
  • Python3将模块从文件夹导入到另一个文件夹

    我的结构字典是 mainFolder folder1 init py file1 py file2 py folder2 init py file3 py file4 py setup py init py 我需要将 file4 py 从f
  • 如何用函数记录一个文件?

    我有一个带有函数 lib py 但没有类的python 文件 每个函数都有以下样式 def fnc1 a b c This fonction does something param a lalala type a str param b
  • 使用 Tkinter 打开网页

    因此 我的应用程序需要能够打开其中的单个网页 并且它必须来自互联网并且未保存 特别是我想使用 Tkinter GUI 工具包 因为它是我最熟悉的工具包 最重要的是 我希望能够在窗口中生成事件 例如单击鼠标 但无需实际使用鼠标 有什么好的方法
  • Python speedtest.net,或等效的[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 是否有一个 Python 库可以实现 SpeedTest net 测试或等效的互联网连接速度测试 GitHub上有一个项目叫速度检查 https gi
  • 我可以用关闭的文件对象做什么?

    当您打开文件时 它存储在一个打开的文件对象中 该对象使您可以访问该文件的各种方法 例如读取或写入 gt gt gt f open file0 gt gt gt f
  • 如何从 python 脚本执行 7zip 命令

    我试图了解如何使用 os system 模块来执行 7zip 命令 现在我不想用 Popen 或 subprocess 让事情变得复杂 我已经安装了 7zip 并将 7zip exe 复制到我的用户文件夹中 我只想提取我的测试文件 inst
  • 使用会话在 Django 中将文件从一个视图传递到另一个视图

    我当前的工作项目要求我允许用户上传各种格式的文件 目前仅处理 CSV 格式 然后使用包含的数据来绘制图表Pandas http pandas pydata org 图书馆 我决定将图形渲染到模板的最简单方法是为图形创建特定视图 然后将图像从
  • pandas groupby 操作缺少数据

    在 pandas 数据框中 我有一列如下所示 0 M 1 E 2 L 3 M 1 4 M 2 5 M 3 6 E 1 7 E 2 8 E 3 9 E 4 10 L 1 11 L 2 12 M 1 a 13 M 1 b 14 M 1 c 15
  • 将图与热图(可能是对数)配对?

    How to create a pair plot in Python like the following but with heat maps instead of points or instead of a hex bin plot
  • 在Python中使用pil读取tif图像时出现值错误?

    我必须读取尺寸的tif图像2200 2200并输入 uint16 我将 PIL 库与 anaconda python 一起使用 如下所示 from PIL import Image img Image open test tif img i
  • Chrome 驱动程序和 Chromium 二进制文件无法在 aws lambda 上运行

    我陷入了一个问题 我需要在 AWS lambda 上做一些抓取工作 所以我按照下面提到的博客及其代码库作为起点 这非常有帮助 并且在运行时环境 Python 3 6 的 AWS lambda 上对我来说工作得很好 https manivan
  • 使用 python 将 CSV 文件上传到 Microsoft Azure 存储帐户

    我正在尝试上传一个 csv使用 python 将文件写入 Microsoft Azure 存储帐户 我已经发现C sharp https blogs msdn microsoft com jmstall 2012 08 03 convert

随机推荐

  • C++整数转成二进制方法总结

    经常遇到要用到二进制的情况 这里我就记录下 1 逐次经典位操作 返回一个含有二进制数的vector include
  • 【深度学习之图像理解】图像分类、物体检测、物体分割、实例分割、语义分割的区别

    Directions in the CV 物体分割 Object segment 属于图像理解范畴 那什么是图像理解 Image Understanding IU 领域包含众多sub domains 如图像分类 物体检测 物体分割 实例分割
  • 前端zip.js实现加密打包上传文件

    背景 一方面 部分系统对文件的私密性和安全性要求较高 实现前端加密打包 服务端不存储密码 下载时手动输入密钥并解压文件 另一方面 传输压缩包到客户端 节约了带宽 节约了传输时间 使用的库 zip js Support of the Zip6
  • List写入Excel,poi操作

    前言 公司最近需要将所有的报表导出集中到报表中心系统中 需要做一个通用的Excel工具类 让各个业务系统简单高效的生成Excel报表 由于原先各个业务系统生成报表方式都不一样 有的地方还直接使用了CSV 因此需要统一生成Excel 本来想用
  • Android Studio 可以正常编译运行 但是代码爆红

    这段时间毕设选题 选了一个自己曾经做过的题目 因为之前是用Android Studio2 3 3写的 现在导入Android Studio 3 2 1 代码报错 但是能正常编译运行 很是奇怪 主要报错原因是 找不到有些类 之前用Androi
  • zookeeper(二)——2PC理论、zookeeper集群、ZAB 协议

    一 关于 2PC 提交 Two Phase Commitment Protocol 当一个事务操作需要跨越多个分布式节点的时候 为了保持事务处理的 ACID特性 就需要引入一个 协调者 TM 来统一调度所有分布式节点的执行逻辑 这些被调度的
  • CTFshow php特性 web111

    目录 源码 思路 题解 总结 源码
  • adworld-crypto-banana_princess

    拿到了一个打不开的pdf文件 用hex editor打开一下看看 再看一下正常的pdf文件 猜测是用了rot13映射了一下字母字符 解密脚本 def load data filename content with open filename
  • SpringBoot线程上下文传递数据

    1 底层实现 使用ThreadLocal 使用方法 public T get public void set T value public void remove 2 自定义上下文 package com ybw context confi
  • golang 闭包函数的应用技巧

    一 有名函数和匿名函数 函数变量类型初始值为nil 函数字面量类型的语法表达格式是 func InputTypeList OutputTypeList 无参函数 func fun var f func 无入参无返回值的函数对象声明 初始值为
  • 以太坊教程:入门学习开发以太坊dapp

    一 区块链 1 分布式去中心化 比特币设计的初衷就是要避免依赖中心化的机构 没有发行机构 也不可能操纵发行数量 既然没有中心化的信用机构 在电子货币运行的过程中 也势必需要一种机制来认可运行在区块链上的行为 包括比特币的运营 亦或是运行在区
  • 【pytorch】Module.parameters()函数实现与网络参数管理

    我们知道可以通过Module parameters 获取网络的参数 那这个是如何实现的呢 我先直接看看函数的代码实现 def parameters self r Returns an iterator over module paramet
  • Edge插件之WeTab,画面优美,可以免费使用chatgpt,很难不爱

    目录 一 普通的edge新标签页 二 安装WeTab插件 1 WeTab插件的安装非常简单 只需在百度搜索wetab 进入官网 2 进入官网 点击edge图标 进入插件下载页面 3 这里由于我是已经安装成功 显示的是删除和启动 首次下载的话
  • element-ui el-tooltip 显示导致父元素 hover 失效问题解决

    添加如下css属性 el tooltip popper pointer events none pointer events 属性用于设置元素是否对鼠标事件做出反应 CSS 语法 属性值 pointer events auto 默认值 设置
  • maven3.8.2版本导致openjdk.jar包报错:Cannot find file

    真的吐血了快 又是maven问题 导致项目打包报错 maven问题梅开二度 我醉了呀 问题描述 在idea中使用Terminal终端 对项目进行打包 然后报错 报错信息 ERROR Failed to execute goal on pro
  • IAR使用技巧

    一 状态栏的解析 Compile 只对目前打开的c文件进行语法检查 不对它进行link Make 对工程所有打开的c文件进行语法检查和link 只编译有改动的文件或者设置变动的文件 Rebuild All 编译链接当前工程 不管文件或者设置
  • Stem教育究竟是什么性质

    STEM教育是中性的 是既可以为应试教育又可以为素质教育服务的工具和武器 用素质教育去引爆STEM教育 才能产生良性的的核裂变 格物斯坦小坦克来研究下stem教育究竟是什么性质 科学教育有一个不大不小的误区 以为 科学 教育就是教科学知识
  • 错误:reference to non-static member function must be called

    问题 今天刷牛客这道题的时候 题目描述 输入一个正整数数组 把数组里所有数字拼接起来排成一个数 打印能拼接出的所有数字中最小的一个 例如输入数组 3 32 321 则打印出这三个数字能排成的最小数字为321323 这是我的代码 class
  • rtx服务器修改登录端口,rtx服务器端口设置

    rtx服务器端口设置 内容精选 换一换 用户在MRS Manager界面配置监控指标转储后 转储失败时产生该告警 转储成功后 告警恢复 监控指标转储失败会影响上层管理系统无法获取到MRS Manager系统的监控指标 无法连接服务器 无法访
  • Python Utils

    在Python开发中 将常用功能封装成为接口 并放入Utils工具类中 直接调用 可以提升效率 常用的函数有 文件夹遍历 文件夹创建 文件读取 时间可读 时间统计 安全除法 双列表排序 配置读取 脚本路径 Numpy判空 文件夹遍历 遍历文