美文网首页IT技术
2018-11-26 python 杂项模块(MD5加密,文件排

2018-11-26 python 杂项模块(MD5加密,文件排

作者: 昨天今天下雨天1 | 来源:发表于2018-11-26 14:58 被阅读13次
    """一些支持方法,比如加密"""
    import hashlib
    import os
    import time
    import datetime
    import json
    from utils.log import logger
    
    
    class EncryptError(Exception):
        pass
    
    
    def sign(sign_dict, private_key=None, encrypt_way='MD5'):
        """传入待签名的字典,返回签名后字符串
        1.字典排序
        2.拼接,用&连接,最后拼接上私钥
        3.MD5加密"""
        dict_keys = sign_dict.keys()
        dict_keys.sort()
    
        string = ''
        for key in dict_keys:
            if sign_dict[key] is None:
                pass
            else:
                string += '{0}={1}&'.format(key, sign_dict[key])
        string = string[0:len(string) - 1]
        string = string.replace(' ', '')
    
        return encrypt(string, salt=private_key, encrypt_way=encrypt_way)
    
    
    def encrypt(string, salt='', encrypt_way='MD5'):
        u"""根据输入的string与加密盐,按照encrypt方式进行加密,并返回加密后的字符串"""
        string += salt
        if encrypt_way.upper() == 'MD5':
            hash_string = hashlib.md5()
        elif encrypt_way.upper() == 'SHA1':
            hash_string = hashlib.sha1()
        else:
            logger.exception(EncryptError('请输入正确的加密方式,目前仅支持 MD5 或 SHA1'))
            return False
    
        hash_string.update(string.encode())
        return hash_string.hexdigest()
    
    
    def get_newest_file_of_path(path):
        """
        :param path: 文件夹路径
        :return path中创建日期最新的一个文件的文件名与创建时间
        """
        return sorted([(x, os.path.getctime(os.path.join(path, x))) for x in os.listdir(path)
                       if os.path.isfile(os.path.join(path, x))], key=lambda i: i[1])[-1]
    
    
    def get_files_by_createtime(path):
        """ 按照创建时间由新到旧排列路径下所有文件 """
        return sorted([(x, os.path.getctime(os.path.join(path, x))) for x in os.listdir(path)
                       if os.path.isfile(os.path.join(path, x))], key=lambda i: i[1], reverse=True)
    
    
    def save_time():
        """:return 可用于文件名的时间日期字符串"""
        return time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
    
    
    def save_date():
        """:return 可用于文件名的日期字符串"""
        return time.strftime('%Y-%m-%d', time.localtime(time.time()))
    
    
    def jprint(jstr, indent=2):
        """ 将符合json格式字符串以缩进的方式打印 """
        try:
            print(json.dumps(json.loads(jstr), sort_keys=True, ensure_ascii=False, indent=indent))
        except json.JSONDecodeError:
            print(jstr)
    
    
    def timestamp_to_time(timestamp, ft='%Y-%m-%d %H:%M:%S'):
        """ 将时间戳转换成固定格式的日期时间字符串 """
        time_local = time.localtime(timestamp)
        return time.strftime(ft, time_local)
    
    
    def time_to_timestamp(dtime, ft='%Y-%m-%d %H:%M:%S'):
        """ 将日期时间字符串转换成时间戳 """
        try:
            time_array = time.strptime(dtime, ft)
        except ValueError:
            time_array = time.strptime(dtime, '%Y-%m-%d')
        return int(time.mktime(time_array))
    
    
    def days(d=3):
        """ 取 d 天前(负值)或 d 天后(正)的时间戳 """
        day_cal = datetime.datetime.now() + datetime.timedelta(days=d)
        # 转换为时间戳
        return int(time.mktime(day_cal.timetuple()))
    
    
    if __name__ == '__main__':
        # print(encrypt('100000307111111'))
        # print(get_newest_file_of_path(os.path.join(os.path.dirname(os.path.abspath(".")), "report")))
        # print(get_files_by_createtime(os.path.join(os.path.dirname(os.path.abspath(".")), "report")))
        t = '2017-12-09'
        # tm = time_to_timestamp(t)
        # print(tm)
        # print(timestamp_to_time(tm))
    
        # print(timestamp_to_time(days(3)))
        # print(timestamp_to_time(days(-3)))
    
    

    相关文章

      网友评论

        本文标题:2018-11-26 python 杂项模块(MD5加密,文件排

        本文链接:https://www.haomeiwen.com/subject/djsbqqtx.html