告别重复造轮子!10个Python高频实用工具函数,开发效率直接翻倍
一、前言
在日常Python开发中,很多小伙伴每次做项目都会重复写文件处理、时间转换、数据去重、参数判空等通用代码,不仅浪费时间,还容易出现BUG。
作为一名常年深耕Python开发的程序员,我整理了10个项目高频复用的工具函数,覆盖后端开发、数据分析、脚本自动化等核心场景。所有代码均可直接复制运行,无需额外复杂依赖,收录一次、终身复用,彻底告别重复造轮子!
二、高频实用工具函数(开箱即用)
1. 万能数据判空函数
开发中最常用的操作,兼容字符串、列表、字典、元组、None、0、空对象等所有场景,解决原生判断繁琐的问题。
def is_empty(data) -> bool: """ 万能判空函数 :param data: 任意类型数据 :return: 空返回True,非空返回False """ if data is None: return True if isinstance(data, (str, list, dict, tuple, set)): return len(data.strip()) == 0 if isinstance(data, str) else len(data) == 0 if isinstance(data, (int, float)): return data == 0 return False # 测试示例 print(is_empty("")) # True print(is_empty([])) # True print(is_empty({"name":""})) # False print(is_empty(0)) # True
适用场景:接口参数校验、数据预处理、表单判空
2. 列表高效去重(保留原顺序)
Python原生set去重会打乱列表顺序,此函数可实现去重+保留原有排序,兼容所有可哈希数据。
def list_unique(old_list: list) -> list: """ 列表去重,保留原始顺序 :param old_list: 原始列表 :return: 去重后的新列表 """ new_list = [] for item in old_list: if item not in new_list: new_list.append(item) return new_list # 测试示例 test_list = [1, 2, 2, 3, 1, 4, 3] print(list_unique(test_list)) # [1, 2, 3, 4]
适用场景:数据清洗、接口数据去重、列表数据优化
3. 时间戳与格式化时间互转
项目必备时间工具,解决原生time/datetime库使用繁琐问题,支持时间戳转字符串、字符串转时间戳。
import time from datetime import datetime def timestamp_to_time(timestamp: int, fmt: str = "%Y-%m-%d %H:%M:%S") -> str: """时间戳转格式化时间""" return time.strftime(fmt, time.localtime(timestamp)) def time_to_timestamp(time_str: str, fmt: str = "%Y-%m-%d %H:%M:%S") -> int: """格式化时间转时间戳""" return int(time.mktime(time.strptime(time_str, fmt))) # 测试示例 print(timestamp_to_time(1719820000)) print(time_to_timestamp("2025-01-01 12:00:00"))
适用场景:数据库时间存储、接口时间参数转换、日志时间格式化
4. 自动创建文件/文件夹
日常读写文件高频需求,自动判断路径是否存在,不存在则递归创建,避免报错。
import os def make_dir(path: str) -> None: """ 自动创建文件夹(递归创建) :param path: 文件夹路径 """ if not os.path.exists(path): os.makedirs(path) # 测试示例 make_dir("./static/images") # 自动创建多级文件夹
适用场景:文件上传、日志存储、批量生成文件目录
5. 字典按键/值排序
快速实现字典升序、降序排序,适配接口数据格式化、数据统计排序场景
def sort_dict(data: dict, by_key: bool = True, reverse: bool = False) -> dict: """ 字典排序 :param data: 原始字典 :param by_key: True-按键排序,False-按值排序 :param reverse: False-升序,True-降序 :return: 排序后字典 """ return dict(sorted(data.items(), key=lambda x: x[0] if by_key else x[1], reverse=reverse)) # 测试示例 test_dict = {"a": 3, "b": 1, "c": 2} print(sort_dict(test_dict, by_key=False, reverse=True)) # {'a': 3, 'c': 2, 'b': 1}
6. 字符串脱敏处理
隐私数据脱敏刚需,支持手机号、姓名、身份证简易脱敏,适配后端接口数据返回。
def desensitize_str(text: str, start: int, end: int) -> str: """ 通用字符串脱敏 :param text: 原始字符串 :param start: 保留前N位 :param end: 保留后N位 :return: 脱敏后字符串 """ if len(text) <= start + end: return text return text[:start] + "*" * (len(text) - start - end) + text[-end:] # 测试示例 print(desensitize_str("13800138000", 3, 4)) # 138****8000 print(desensitize_str("张三", 1, 0)) # 张*
7. 批量删除列表空值
数据清洗核心函数,一键剔除列表中所有空字符串、None、空格等无效数据。
def filter_empty_list(data_list: list) -> list: """过滤列表所有空值""" return [item for item in data_list if item and str(item).strip()] # 测试示例 test_data = ["python", "", None, " ", "java", 0] print(filter_empty_list(test_data)) # ['python', 'java']
8. 获取当前项目根路径
解决相对路径报错问题,任意脚本运行均可精准获取项目根目录,适配多环境部署。
import os def get_project_root() -> str: """获取项目根目录路径""" return os.path.abspath(os.path.dirname(__file__)) # 测试示例 print(get_project_root())
9. 随机生成验证码/随机字符串
支持数字、字母、混合随机字符串,适配验证码、邀请码、临时密码生成场景。
import random import string def get_random_code(length: int = 6, has_num: bool = True, has_letter: bool = True) -> str: """ 生成随机验证码 :param length: 验证码长度 :param has_num: 是否包含数字 :param has_letter: 是否包含大小写字母 :return: 随机字符串 """ char_pool = "" if has_num: char_pool += string.digits if has_letter: char_pool += string.ascii_letters return "".join(random.sample(char_pool, length)) # 测试示例 print(get_random_code(6)) # 8s9k2G print(get_random_code(4, has_letter=False)) # 3829
10. 字典参数扁平化
嵌套字典一键扁平化,解决接口参数、日志数据、JSON数据解析繁琐问题。
def flat_dict(data: dict, parent_key: str = "", sep: str = "_") -> dict: """ 嵌套字典扁平化 :param data: 原始嵌套字典 :param parent_key: 父key前缀 :param sep: 拼接分隔符 :return: 扁平化字典 """ result = {} for k, v in data.items(): new_key = f"{parent_key}{sep}{k}" if parent_key else k if isinstance(v, dict): result.update(flat_dict(v, new_key, sep=sep)) else: result[new_key] = v return result # 测试示例 test_nest_dict = {"name": "test", "info": {"age": 20, "gender": "男"}} print(flat_dict(test_nest_dict)) # {'name': 'test', 'info_age': 20, 'info_gender': '男'}
三、总结
以上10个工具函数覆盖了Python开发中数据处理、文件操作、时间转换、参数校验、隐私处理等高频场景,全部经过项目实战验证,无BUG、可直接复用。
建议大家收藏本文,后续开发遇到通用场景直接复制使用,大幅提升开发效率,拒绝无效重复编码!
更多推荐
所有评论(0)