You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.2 KiB
83 lines
2.2 KiB
# _*_ coding: utf-8 _*_
|
|
# @Time : 2021/5/27 14:58
|
|
# @File : funcs.py
|
|
# @Software: PyCharm
|
|
|
|
"""
|
|
此文件存放一些公用的工具函数
|
|
"""
|
|
import datetime
|
|
import random
|
|
from random import shuffle
|
|
from django_redis import get_redis_connection
|
|
|
|
from utils.custom import MyCustomError
|
|
|
|
|
|
def generate_random_str(randomlength=16):
|
|
"""
|
|
生成一个指定长度的随机字符串
|
|
"""
|
|
random_str = ''
|
|
base_str = 'abcdefghigklmnopqrstuvwxyz0123456789'
|
|
length = len(base_str) - 1
|
|
for i in range(randomlength):
|
|
random_str += base_str[random.randint(0, length)]
|
|
return random_str
|
|
|
|
|
|
def generate_random_str_16_system(randomlength=16):
|
|
"""
|
|
生成一个指定长度的随机字符串, 这个字符串看起来像16进制的
|
|
"""
|
|
random_str = ''
|
|
base_str = '0123456789abcdef'
|
|
length = len(base_str) - 1
|
|
for i in range(randomlength):
|
|
random_str += base_str[random.randint(0, length)]
|
|
return random_str
|
|
|
|
|
|
# 获取乱序字符串
|
|
def shuffle_str(s):
|
|
# 将字符串转换成列表
|
|
str_list = list(s)
|
|
# 调用random模块的shuffle函数打乱列表
|
|
shuffle(str_list)
|
|
# 将列表转字符串
|
|
return ''.join(str_list)
|
|
|
|
|
|
# 获取原来字符串在新字符串中的位置
|
|
def str_map(origin, new_str):
|
|
result_str = []
|
|
new_str_list = list(new_str)
|
|
for each in origin:
|
|
index = new_str_list.index(each)
|
|
result_str.append(index)
|
|
# 生成轨迹
|
|
track = random.sample(range(0, len(result_str)), len(result_str))
|
|
return result_str, track
|
|
|
|
|
|
# 定义尝试的日期格式列表
|
|
sys_formats = ["%Y-%m-%d", "%Y/%m/%d", "%Y年%m月%d日", "%Y%m%d"]
|
|
|
|
|
|
def parse_date(date_string, formats=sys_formats):
|
|
"""
|
|
尝试按照提供的格式解析日期字符串, 返回日期date
|
|
@param date_string: 日期字符串
|
|
@param formats: 尝试格式
|
|
@return:
|
|
"""
|
|
if not isinstance(formats, list):
|
|
if not isinstance(formats, str) or formats not in sys_formats:
|
|
raise MyCustomError("日期格式不支持")
|
|
formats = [formats, ]
|
|
for fmt in formats:
|
|
try:
|
|
return datetime.datetime.strptime(date_string, fmt).date()
|
|
except ValueError:
|
|
pass
|
|
raise MyCustomError("无法解析日期字符串")
|
|
|