zoukankan      html  css  js  c++  java
  • mada-gupiao-test

    以下代码实现功能:

    1、获取json数据,转为python字典

    2、求和,排序

    3、排除1:一个指定字段值的几种情况的排除。

    4、排除2:时间距离现在大于一年的排除。大于365天就排除。

    (一)最新推荐版

    func.py中

    import time
    import datetime
    import math
    
    
    # 一、相同日期格式的时间距离
    
    def date2obj(date_str='2015-04-07 19:11:21', format='%Y-%m-%d %H:%M:%S'):
        '''
        日期字串 转 日期对象
        :param date_str:日期字串
        :param format:日期字串格式
        :return:日期对象
        d_obj.year  输出 2015
        d_obj.month  输出 4
        d_obj.day  输出 7
        '''
        t_str = date_str
        d_obj = datetime.datetime.strptime(t_str, format)
    
        return d_obj
    
    
    # 1、s秒时间间隔
    def time_seconds_span(start_date1, end_date2, fomart1='%Y-%m-%d %H:%M:%S', fomart2='%Y-%m-%d %H:%M:%S'):
        d1_obj = date2obj(start_date1, fomart1)
        d2_obj = date2obj(end_date2, fomart2)
    
        return (d2_obj - d1_obj).seconds
    
    
    # 2、min分钟时间间隔
    def time_minutes_span(start_date1, end_date2, fomart1='%Y-%m-%d %H:%M:%S', fomart2='%Y-%m-%d %H:%M:%S'):
        d1_obj = date2obj(start_date1, fomart1)
        d2_obj = date2obj(end_date2, fomart2)
        seconds_span = (d2_obj - d1_obj).seconds
        # 向下取整
        mins_span = math.floor(seconds_span / 60)
    
        return mins_span
    
    
    # 3、h小时时间间隔
    def time_hours_span(start_date1, end_date2, fomart1='%Y-%m-%d %H:%M:%S', fomart2='%Y-%m-%d %H:%M:%S'):
        d1_obj = date2obj(start_date1, fomart1)
        d2_obj = date2obj(end_date2, fomart2)
        seconds_span = (d2_obj - d1_obj).seconds
        # 向下取整
        hours_span = math.floor(seconds_span / (60 * 60))
    
        return hours_span
    
    
    # 4、d天数时间间隔。无论是否带有h、min、s,计算时,会忽略h、min、s,只计算天数、月数和年数。
    def date_days_span(start_date1, end_date2, fomart1='%Y-%m-%d', fomart2='%Y-%m-%d'):
        d1_obj = date2obj(start_date1, fomart1)
        d2_obj = date2obj(end_date2, fomart2)
    
        # 只取天数差值。等同于向下取整。
        days_span = (d2_obj - d1_obj).days
    
        return days_span
    
    
    # 5、month月数时间间隔。无论是否带有h、min、s,计算时,会忽略h、min、s,只计算天数、月数和年数。
    def date_months_span(start_date1, end_date2, fomart1='%Y-%m-%d', fomart2='%Y-%m-%d'):
        d1_obj = date2obj(start_date1, fomart1)
        d2_obj = date2obj(end_date2, fomart2)
    
        # 向下取整。只取天数。
        days_span = (d2_obj - d1_obj).days
        months_span = math.floor(days_span / 30)
    
        return months_span
    
    
    # 6、year年数时间间隔。无论是否带有h、min、s,计算时,会忽略h、min、s,只计算天数、月数和年数。
    def date_years_span(start_date1, end_date2, fomart1='%Y-%m-%d', fomart2='%Y-%m-%d'):
        d1_obj = date2obj(start_date1, fomart1)
        d2_obj = date2obj(end_date2, fomart2)
    
        # 向下取整。只取天数。
        days_span = (d2_obj - d1_obj).days
        years_span = math.floor(days_span / (12 * 30))
    
        return years_span
    
    
    def gap_start2end(start_str, end_str, start_fomart='%Y-%m-%d %H:%M:%S', end_fomart='%Y-%m-%d %H:%M:%S'):
        '''
        比较两个时刻的时间差
        :param start_str: 起始时刻日期字串
        :param end_str: 截止时刻日期字串
        :param start_fomart: 起始时刻日期字串读取格式
        :param end_fomart: 截止时刻日期字串读取格式
        :return: 时刻差值组合数的数组((y, m, d), (h, min, sec))
        # 举例说明:
        '2009-02-28 00:00:04' ,
        '2010-03-01 01:02:03'
        输出((1, 0, 6), (1, 1, 59))
        含义为:时间间隔1年0个月6天,1小时1分钟59秒
    
        # 时间回推说明:
        # sum_days = y * 30 * 12 + m * 30 + d
        # sum_seconds = sum_days * 24 * 60 * 60 + h * 60 * 60 + min * 60 + sec
        '''
    
        # 年数差
        years_gap = date_years_span(start_str, end_str, start_fomart, end_fomart)
        # 月数差
        months_gap = date_months_span(start_str, end_str, start_fomart, end_fomart)
        # 天数差
        days_gap = date_days_span(start_str, end_str, start_fomart, end_fomart)
        # 取出日期的组合表示数
        y = years_gap
        m = months_gap % 12
        d = days_gap % 30
    
        # 小时数差
        hours_gap = time_hours_span(start_str, end_str, start_fomart, end_fomart)
        # 分钟数差
        mins_gap = time_minutes_span(start_str, end_str, start_fomart, end_fomart)
        # 秒数差
        seconds_gap = time_seconds_span(start_str, end_str, start_fomart, end_fomart)
        # 取出时间的组合表示数
        h = hours_gap
        min = mins_gap % 60
        sec = seconds_gap % 60
    
        return ((y, m, d), (h, min, sec))
    
    
    def time2date(timeint=1565673941, format="%Y-%m-%d %H:%M:%S"):
        '''
        时间戳转为日期字串,单位s,秒
        :param timeint:时间戳
        :return:日期字串
        输出举例说明:
        (1565673941, "%Y-%m-%d %H:%M:%S")  输出  2019-08-13 13:25:41
        (1565673941, "%Y-%m-%d")  输出  2019-08-13
        (1565673941, "%Y%m%d")  输出  20190813
        '''
        local_time = time.localtime(timeint)
        data_head = time.strftime(format, local_time)
    
        return data_head
    
    if __name__ == '__main__':
        # # 一、相同日期格式的时间距离。
        # start_date = '2009-02-28 00:00:04'
        # end_date = '2010-03-01 01:02:03'
        # cha = gap_start2end(start_date, end_date)
        # print(cha)
    
        # 二、不同日期格式的时间距离。距离现在的时间距离
        start_date = '20200401'
        end_date = time2date(time.time())
        cha_now = gap_start2end(start_date, end_date, start_fomart='%Y%m%d', end_fomart='%Y-%m-%d %H:%M:%S')
        print(cha_now)
    

      

    main_gupiao.py中

    import json
    import requests
    from func import *
    
    url = "http://71.push2.eastmoney.com/api/qt/clist/get?pn=1&pz=500&fltt=2&fs=b:MK0354&fields=f2,f3,f12,f14,f227,f229,f230,f232,f234,f235,f236,f237,f238,f239,f240,f241,f242,f26,f243"
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
    }
    response = requests.get(url, headers=headers)
    data_str = response.content.decode()
    data_dict = json.loads(data_str)
    all_c_list = []
    for i in range(0, len(data_dict['data']['diff'])):
        a_f238 = data_dict['data']['diff'][str(i)]['f238']
        b_f239 = data_dict['data']['diff'][str(i)]['f239']
        c_plus = a_f238 + b_f239
        d_name = data_dict['data']['diff'][str(i)]['f14']
        e_f2 = data_dict['data']['diff'][str(i)]['f2']
        f_end_date = str(data_dict['data']['diff'][str(i)]['f242'])
    
        # 计算出截止现在的时间差
        start_date = f_end_date
        end_date = time2date(time.time())
        cha_now = gap_start2end(start_date, end_date, start_fomart='%Y%m%d', end_fomart='%Y-%m-%d %H:%M:%S')
        y_gap = cha_now[0][0]
        # print(cha_now)
        # print(y_gap)
        # 排除e_f2值为0、100、空这3种情况的数据。同时,排除f242日期距离现在大于1年(360天)的数据。
        if (e_f2 in ['0', 0, '100', 100, " ", None]) or y_gap > 0:
            pass
        else:  # 保留小数点后4位
            c_plus_save4 = "%.04f" % c_plus
            all_c_list.append((d_name, c_plus_save4))
    print("排序前")
    print(all_c_list)
    # 按照c_plus从小到大排序
    new_c_list = sorted(all_c_list, key=lambda x: x[1])
    print("排序后:按照c_plus从小到大排序")
    print(new_c_list)
    print("min:(%s,%s)" % new_c_list[0])
    print("max:(%s,%s)" % new_c_list[-1])
    print(len(new_c_list))
    

      

     (二)早期版本

    import json
    import requests
    import time
     
     
    def datestr2timeint(date_str='2016-05-05 20:28:54', format='%Y-%m-%d %H:%M:%S'):
        '''
        日期字符串 转为 时间戳。精确到s,单位秒。
        输入举例说明:
        ('2016-05-05 20:28:54')
        ('2016-05-05 20:28:54','%Y-%m-%d %H:%M:%S')
        ('20160505 20:28:54','%Y%m%d %H:%M:%S')
        ('20160505 20_28_54','%Y%m%d %H_%M_%S')
        ('20160505','%Y%m%d')
        :param date_str:日期字符串
        :param format:输入日期字串的日期格式、样式
        :return:转换为int的时间戳
        '''
        # 将时间字符串转为时间戳int
        dt = date_str
        # 转换成时间数组
        timeArray = time.strptime(dt, format)
        # 转换成时间戳
        timestamp = int(time.mktime(timeArray))
     
        return timestamp
     
     
    def is_more_one_year(date_str="20200402", format='%Y%m%d'):
        '''
        判断日期距离现在是否大于1年
        :param date_str: 被判断的日期字串
        :param format: 日期字串的识别格式
        :return: 布尔值。大于1年返回True
        '''
        time1_int = datestr2timeint(date_str, format)
        time_now_int = int(time.time())
     
        # 判断时间距离现在是否大于1年
        one_year_int = 365 * 24 * 60 * 60
        if time_now_int - time1_int > one_year_int:
            # print("%s时间距离现在(2020-04-02)大于1年" % date_str)
            return True
        else:
            # print("时间距离在1年以以内")
            return False
     
     
    url = "http://71.push2.eastmoney.com/api/qt/clist/get?pn=1&pz=500&fltt=2&fs=b:MK0354&fields=f2,f3,f12,f14,f227,f229,f230,f232,f234,f235,f236,f237,f238,f239,f240,f241,f242,f26,f243"
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
    }
    response = requests.get(url, headers=headers)
    data_str = response.content.decode()
    data_dict = json.loads(data_str)
    all_c_list = []
    for i in range(0, len(data_dict['data']['diff'])):
        a_f238 = data_dict['data']['diff'][str(i)]['f238']
        b_f239 = data_dict['data']['diff'][str(i)]['f239']
        c_plus = a_f238 + b_f239
        d_name = data_dict['data']['diff'][str(i)]['f14']
        e_f2 = data_dict['data']['diff'][str(i)]['f2']
        f_end_date = str(data_dict['data']['diff'][str(i)]['f242'])
     
        # 判断时间距离现在是否大于1年
        big_one_year_bool = is_more_one_year(f_end_date)
        # print(big_one_year_bool)
     
        # 排除e_f2值为0、100、空这3种情况的数据。排除日期截止现在大于一年的数据。
        if (e_f2 in ['0', 0, '100', 100, " ", None]) or (big_one_year_bool is True):
            pass
        else:  # 保留小数点后4位
            c_plus_save4 = "%.04f" % c_plus
            all_c_list.append((d_name, c_plus_save4))
    print("排序前")
    print(all_c_list)
    # 按照c_plus从小到大排序
    new_c_list = sorted(all_c_list, key=lambda x: x[1])
    print("排序后:按照c_plus从小到大排序")
    print(new_c_list)
    print("min:(%s,%s)" % new_c_list[0])
    print("max:(%s,%s)" % new_c_list[-1])
    print(len(new_c_list))
    

      

  • 相关阅读:
    Python变量小秘密
    Python编解码问题与文本文件处理
    Java持久层框架Mybatis入门
    teprunner重磅更新Git打通PyCharm与测试平台
    JMeter定时器设置延迟与同步
    Docker开启安全的TLS远程连接
    消息队列之如何保证消息的幂等性
    消息队列之如何保证消息的可靠传输
    spring技术内幕学习笔记01
    linux操作指南-04
  • 原文地址:https://www.cnblogs.com/andy9468/p/12618369.html
Copyright © 2011-2022 走看看