python个人常用工具库代码整理

  1. 自动生成指定长度的随机字符串
def generate_random_str(random_length=16, digits_str=True, ascii_str=True, punctuation_str=False):
    """
    生成一个指定长度的随机字符串,其中
    string.digits=0123456789
    string.ascii_letters=abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    string.punctuation=!"#$%&'()*+,-./:;<=>?@[]^_`{|}~
    :param random_length: 生成的字符串长度,默认16位
    :param digits_str: 是否存在数字
    :param ascii_str: 是否存在大小写字母
    :param punctuation_str: 是否存在标点符号
    :return: 一串字符串
    """
    char = ''
    if digits_str:
        char += string.digits
    if ascii_str:
        char += string.ascii_letters
    if punctuation_str:
        char += string.punctuation
    str_list = [random.choice(char) for _ in range(random_length)]
    random_str = ''.join(str_list)
    return random_str
  1. 验证字符串是否是正常的IP字符串
def valida_ip(ip: str):
    """验证IP"""
    try:
        ipaddress.ip_address(ip)
        return True
    except Exception:
        return False
  1. 获取IP地址的地理信息
def get_geo(ip):
    if ip.startswith(('192.168', '172.17', '0.0.0.0', '127.0.0.1')):
        return ""
    with geoip2.database.Reader('./util/GeoLite2-City.mmdb') as reader:
        try:
            response = reader.city(ip)
            country_name_zh = response.country.names['zh-CN']  # 国家中文名字
            province_name = response.subdivisions.most_specific.names['zh-CN']  # 省份名字
            city = response.city.names['zh-CN']
            return f"({country_name_zh} {province_name} {city})"
        except Exception as e:
            return ""
  1. 获取以当前日期到指定工作日的结束日期
# 需要pip install chinesecalendar 
def from_workday_get_datetime(workday: int):
    res_datetime = datetime.now()
    while workday > 0:
        res_datetime += timedelta(days=1)
        if is_workday(res_datetime):
            workday -= 1
    return res_datetime
  1. 验证MAC地址是否有效
def valida_macaddr(macaddr: str):
    """验证mac地址"""
    pattern = compile(r"^\s*([0-9a-fA-F]{2}-){5}[0-9a-fA-F]{2}\s*$" if "-" in macaddr
                      else r"^\s*([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}\s*$")
    return True if pattern.match(macaddr) else False
  1. 时间戳转化为时间
def dns_time_convert_datetime(dns_time: int):
    """时间戳转换为时间"""
    return strftime("%Y-%m-%d %H:%M:%S", localtime(dns_time))
  1. 重置字典类型字符串为字典类型
def reset_data(data: str):
    try:
        json_data = json.loads(data)
        return json_data
    except Exception as e:
        raise ValueError("内容非法")
  1. 判断是否是一个有效的日期字符串
def is_valid_date(date_str):
    """
    判断是否是一个有效的日期字符串
    :param date_str:
    :return:
    """
    try:
        datetime.datetime.strptime(date_str, "%Y-%m-%d")
        return True
    except Exception as e:
        return False
  1. 字节单位转换
def StrOfSize(size):
    """
    递归实现,精确为最大单位值 + 小数点后三位
    """
    def strofsize(integer, remainder, level):
        if integer >= 1024:
            remainder = integer % 1024
            integer //= 1024
            level += 1
            return strofsize(integer, remainder, level)
        else:
            return integer, remainder, level

    units = ['B', 'K', 'M', 'G', 'T', 'PB']
    integer, remainder, level = strofsize(size, 0, 0)
    if level+1 > len(units):
        level = -1
    return '{}.{:>02d}{}'.format(integer, remainder, units[level])
  1. 为没有协议的url默认加上http协议
def init_url(url):
    """
    为没有协议的url默认加上http协议
    :param url: 原url路径
    :return: 拥有协议的url路径
    """
    # 判断url是否存在协议,不存在添加http协议
    try:
        url = re.search(r'\S+', url).group(0)
    except Exception as e:
        url = url
    if not (url.startswith('http://') or url.startswith('https://')):
        url = 'http://' + url
    return url
  1. 检测url路径是否可以正常访问
def check_url(url):
    """
    检测url路径是否可以正常访问
    :param url: 需要请求的地址
    :return: 是否正常访问的布尔值
    """
    # 判定url存在
    if not url:
        return False
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
    }
    # 判断url是否可以访问
    try:
        code = requests.head(url, headers=headers, timeout=30).status_code
        if code in [200, 301, 302]:
            return True
        else:
            return False
    except Exception as e:
        return False

12.匹配手机号

def match_phone(phone: str):
	try:
		return True if re.match(r'^1[3-9]\d{9}$', phone) else False
	except Exception as e:
		return False
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值