本文最后更新于 2025-12-17,文章内容可能已经过时。

股票查询脚本


历时两天终于完成了,期间学习、巩固了很多知识。
list列表80%
dict字典50%
str字符串90%
异常处理10%
文件处理70%

# -*- coding = utf-8 -*-
# Author:YuanBai
# 作者:元白
# @Time : 2022/6/11-2:25
# @File : 股票查询.py
# @Software : PyCharm
def error_out(info: str):
    print(info+'''
输入help或h查看说明文档。
******************************''')


def find(title_type: str, _num):
    try:
        cond = query.replace(title_type, '').replace('市盈率', '').replace('TTM', '')
        show = []
        if cond[-1] == '%':
            num = float(cond[1:-1:]) / 100
        elif cond[-1] == '万':
            num = float(cond[1:-1:])
            num = num
        elif cond[-1] == '亿':
            num = float(cond[1:-1:])
            num *= 10000
        else:
            num = float(cond[1::])

        for i in range(len(gp_lst)):
            check_info = gp_lst[i][_num]
            if check_info[-1] == '%':
                check_info = check_info[0:-1:]
                check_info = float(check_info) / 100
            elif check_info[-1] == '万':
                check_info = float(check_info[0:-1:])
            elif check_info[-1] == '亿':
                check_info = float(check_info[0:-1:]) * 10000
            elif _num == 9:
                if check_info != '亏损':
                    check_info = float(check_info)
                else:
                    check_info = -1
            elif _num == 10:
                if check_info != '-':
                    check_info = check_info[0:-1:]
                    check_info = float(check_info) / 100
                else:
                    check_info = 0
            else:
                check_info = float(check_info)
            if cond[0] == '>':
                if check_info > num:
                    show.append(i)
            elif cond[0] == '<':
                if check_info < num:
                    show.append(i)
            elif cond[0] == '=':
                if check_info == num:
                    show.append(i)

            else:
                error_out('error:25,输入错误,请重新输入!')
        if show:
            show_title(title_lst)
            for i in show:
                show_result(i)
        else:
            print('无符合条件的数据!')
    except (ValueError, IndexError):
        error_out('输入格式错误!')
    except SystemExit:
        error_out('error:27,输入错误,请重新输入!')


def creat_lst(file_path):
    with open(file_path, 'r+', encoding='utf-8') as f:
        a = []
        [a.append(i) for i in f]
        b = [i.strip() for i in a]
        gp_lst = [b[i].split(',') for i in range(1, len(b))]
        title_lst = b[0].split(',')
        name_lst = [b[i].split(',')[1] for i in range(1, len(b))]
        return title_lst, gp_lst, name_lst


def show_help():
    print('''
------------------------帮助文档-------------------------
本系统支持以下查询方式。                
1.输入完整股票代码查询                   
2.模糊股票名称查询                             
3.其他条件查询{查询项}{筛选条件}
------------------------查询样例-------------------------
SZ000615
华特气体
气体
当前价>50
涨跌幅<20%
市值>200亿
------------------------特殊说明-------------------------
对于包含'%'的条件,不加'%'将按照补齐'%'后运算。
如:"涨跌幅<20%"的查询效果等同于"涨跌幅<0.2"
对于数额上万的查询条件,需要在数字后加单位。
如:成交额<5000万 
----------------------支持条件查询列表---------------------
当前价
涨跌额
涨跌幅
年初至今
成交量
成交额
换手率
市盈率(TTM)/市盈率/TTM
股息率
市值 
--------------------------------------------------------''')


def show_title(title_lst):
    for k in title_lst:
        print(k, end=' ')
    print()


def show_result(num: int):
    print([j for j in gp_lst[num]], end=' ')
    print()
    return False


if __name__ == '__main__':
    import re

    # from functools import reduce
    file_path = '股票信息.txt'
    try:
        title_lst, gp_lst, name_lst = creat_lst(file_path)
        while 1:
            try:
                query = input('股票查询接口:')
                flag = -1
                show = 0
                # 打标记
                for i in range(2, 12):
                    if title_lst[i] in query:
                        flag = i
                        break
                    elif 'SZ' in query or 'SH' in query:
                        flag = 0
                        break
                    elif '市盈率' in query or 'TTM' in query:
                        flag = 9
                        break

                # 无输入
                if query == '':
                    continue
                # 退出
                elif query == 'quit' or query == '^D':
                    print('退出!')
                    break
                elif query == 'h' or query == 'help':
                    show_help()
                # 股票代码
                elif flag == 0:
                    for i in range(len(gp_lst)):
                        if gp_lst[i][0] == query:
                            show_title(title_lst)
                            flag = show_result(i)
                    if flag == 0:
                        error_out('请输入完整的股票代码。')
                # 股票名称模糊查询
                elif flag == -1:
                    result = []
                    for i in range(len(gp_lst)):
                        if re.search(query, name_lst[i]):
                            result.append(i)
                            flag = 1
                    if flag == -1:
                        error_out('查无此信息,请输入正确的股票名称。')
                    else:
                        show_title(title_lst)
                        [show_result(i) for i in result]
                # 其他条件查询
                elif flag > 1:
                    find(title_lst[flag], flag)
                else:
                    error_out('149 查无此信息。')
            except FileNotFoundError:
                print('while error')
                break
    except FileNotFoundError:
        print(f'未找到文件:{file_path}')
    except IndexError:
        print(f'文件"{file_path}"内信息错误')

股票查询接口:股份
股票代码 股票名称 当前价 涨跌额 涨跌幅 年初至今 成交量 成交额 换手率 市盈率(TTM) 股息率 市值 
SH603348 文灿股份 18.06 +1.64 +9.99% -25.15% 357.86万 6328.87万 4.39% 89.39 0.89% 41.83亿 

展示的表格有点丑,明天学习优化一下。