代码工具

100 阅读2分钟

1.list转带括号字符串(用于sql语句)

def get_sql_array(data_lst, val_str=False):
    if not data_lst:
        return ''

    if val_str:
        data_str = ", ".join(["'{}'".format(str(data)) for data in data_lst])
    else:
        data_str = ", ".join([str(data) for data in data_lst])
    ret = "(" + f"{data_str}" + ")"

    return ret
    
 eq:
 input: [1, 2, 3, 4]
 val_str=False output:  "(1, 2, 3, 4)"
 val_str=True output:  "('1', '2', '3', '4')"
 

2.生成随机整数

def gen_rand_code(length=4):
    # 生成随机的整数,默认4位
    a = 0
    b = "9" * length
    return str(random.randint(a, int(b))).zfill(length)

3.手机号校验

def is_tel(string):
    # 电信号段 133,153,177,173,180,189,181,199
    # 移动号段 134、135、136、137、138、139、147、150、151、152、157、158、159、182、187、188
    # 联通号段 130、131、132、145、155、156、166、171、175、176、185、186、196
    regex = re.compile(r"^1[3456789]\d{9}$")
    ret = re.match(regex, string)
    return isinstance(ret, re.Match)

4.邮箱校验

def is_email(string):
    regex = re.compile(r'([A-Za-z0-9]+[.-_])*[A-Za-z0-9]+@[A-Za-z0-9-]+(.[A-Z|a-z]{2,})+')
    ret = re.fullmatch(regex, string)
    return isinstance(ret, re.Match)

5.获取pdf文件总页数

def get_pdf_page(pdf_path):
    try:
        reader = PdfFileReader(pdf_path)
        # 不解密可能会报错:PyPDF2.utils.PdfReadError: File has not been decrypted
        if reader.isEncrypted:
            reader.decrypt('')
        page_num = reader.getNumPages()
    except:
        page_num = 0
    return page_num

6.提取html内容

def html2str(html_str):
    str_ = ""
    if not html_str:
        return str_
    try:
        doc = pyquery.PyQuery(html_str)
        str_ = doc.text()
    except:
        return str_
    return str_

7.时间秒转时分格式

def second_format(second):
    sec_str = ""
    try:
        second = int(second)
        m, s = divmod(second, 60)
        h, m = divmod(m, 60)
        if not h:
            sec_str = "{m}分钟".format(h=h, m=m)
        else:
            sec_str = "{h}小时{m}分钟".format(h=h, m=m)
    except:
        return sec_str
    return sec_str

8.提取中文数字字母

def extract_chinese_number_letter(str_):
    if not str_:
        return ""
    str_ = "".join(re.findall(r'[\u4e00-\u9fa5a-zA-Z0-9]', str_))
    return str_

9.下划线转小驼峰

def to_lower_camel(content):
    """下划线转小驼峰法命名"""
    if isinstance(content, dict):
        return {re.sub('_([a-zA-Z])', lambda m: (m.group(1).upper()), k): v for k, v in content.items()}
    elif isinstance(content, list):
        return [{re.sub('_([a-zA-Z])', lambda m: (m.group(1).upper()), k): v for k, v in item.items()} for item in content]
    else:
        return content