From 8c9fef0383697a8ee55a5ae51aef9f7b410c7b9a Mon Sep 17 00:00:00 2001 From: lintaogood Date: Thu, 22 Jan 2026 16:18:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9B=B4=E6=96=B0=20?= =?UTF-8?q?=E7=9A=84=E4=B8=80=E4=BA=9B=E5=B0=8Fbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../update_tushare_totxt.cpython-310.pyc | Bin 29273 -> 31896 bytes app.log | 37 +- app.log.2026-01-17 | 3 + market_data_check.log | 727 +++++------------- market_data_check.log.2026-01-17 | 518 +++++++++++++ update_tushare_totxt.py | 278 ++++--- 6 files changed, 933 insertions(+), 630 deletions(-) create mode 100644 app.log.2026-01-17 create mode 100644 market_data_check.log.2026-01-17 diff --git a/__pycache__/update_tushare_totxt.cpython-310.pyc b/__pycache__/update_tushare_totxt.cpython-310.pyc index 09ad69b3277852005fff0be4125ea714e1580766..7e744da03f243f0cfd9edeb9451fabd0f3f86ebb 100644 GIT binary patch delta 10769 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 delta 8292 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 停牌开始日期 20251218,数据完整,不输出报告 -2026-01-17 23:11:48 - INFO - 找到 300658.SZ 在 20251217 至 20260117 期间的停牌数据: 10条 -2026-01-17 23:11:48 - INFO - 股票 300658.SZ 在 20260116 处于停牌状态 -2026-01-17 23:11:48 - INFO - 股票 300658.SZ 当前处于停牌状态 -2026-01-17 23:11:48 - INFO - 股票 300658.SZ 的最新行情日期 20251231 < 停牌开始日期 20260105,开始更新数据 -2026-01-17 23:11:48 - INFO - 开始更新股票 300658.SZ 的行情数据 -2026-01-17 23:11:48 - INFO - 股票 300658.SZ 现有最新日期: 20251231,将获取 20260101 至今的数据 -2026-01-17 23:11:53 - INFO - 未获取到股票 300658.SZ 的新数据 -2026-01-17 23:11:54 - INFO - 股票 300658.SZ 数据更新成功,最新日期: 20251231 -2026-01-17 23:11:59 - INFO - 找到 601615.SH 在 20251217 至 20260117 期间的停牌数据: 4条 -2026-01-17 23:11:59 - INFO - 股票 601615.SH 在 20260116 处于停牌状态 -2026-01-17 23:11:59 - INFO - 股票 601615.SH 当前处于停牌状态 -2026-01-17 23:11:59 - INFO - 股票 601615.SH 的最新行情日期 20260112 < 停牌开始日期 20260113,开始更新数据 -2026-01-17 23:11:59 - INFO - 开始更新股票 601615.SH 的行情数据 -2026-01-17 23:11:59 - INFO - 股票 601615.SH 现有最新日期: 20260112,将获取 20260113 至今的数据 -2026-01-17 23:12:29 - ERROR - 读取文件 D:\gp_data\day\601615.SH_daily_data.txt 失败: HTTPConnectionPool(host='127.0.0.1', port=9674): Read timed out. (read timeout=30) -2026-01-17 23:12:29 - INFO - 获取股票 601615.SH 的全部行情数据 -2026-01-17 23:12:34 - INFO - 股票 601615.SH 的行情数据已成功获取并保存 -2026-01-17 23:12:34 - INFO - 股票 601615.SH 数据更新成功,最新日期: 20260112 -2026-01-17 23:12:34 - INFO - 停牌检查完成,剩余 5 个需要输出报告的不完整个股 -2026-01-17 23:12:34 - INFO - 检查完成,共检查 2592 个文件 -2026-01-17 23:12:34 - INFO - 发现 5 个未更新到最新的数据文件 -2026-01-17 23:12:34 - INFO - 检查结果已输出到:market_data_check_result.csv -2026-01-17 23:23:52 - INFO - 日志文件已配置: market_data_check.log -2026-01-17 23:23:52 - INFO - 开始检查行情数据完整性,检查日期:20260117 -2026-01-17 23:23:52 - INFO - 正在加载交易日历缓存... -2026-01-17 23:23:52 - INFO - 成功获取并缓存交易日历: 20240118至20260216 -2026-01-17 23:23:52 - INFO - 交易日历缓存成功,共 761 条记录 -2026-01-17 23:23:52 - WARNING - 检查日期 20260117 不是交易日,正在寻找最近的前一个交易日... -2026-01-17 23:23:52 - INFO - 目标日期 20260117 的前一个交易日是 20260116 -2026-01-17 23:23:52 - INFO - 已将检查日期调整为:20260116 -2026-01-17 23:23:52 - INFO - 开始检查 2592 个数据文件... -2026-01-17 23:23:52 - INFO - 收集到的不完整文件数量: 6 -2026-01-17 23:23:52 - INFO - 前5个不完整文件示例: ['000670.SZ', '002131.SZ', '002155.SZ', '002931.SZ', '300658.SZ'] -2026-01-17 23:23:52 - INFO - 开始对 6 个数据不完整的个股进行停牌检查 -2026-01-17 23:23:52 - INFO - 找到 000670.SZ 在 20251217 至 20260117 期间的停牌数据: 9条 -2026-01-17 23:23:52 - INFO - 股票 000670.SZ 在 20260116 处于停牌状态 -2026-01-17 23:23:52 - INFO - 股票 000670.SZ 当前处于停牌状态 -2026-01-17 23:23:52 - INFO - 股票 000670.SZ 的最新行情日期 20260105 < 停牌开始日期 20260106,开始更新数据 -2026-01-17 23:23:52 - INFO - 开始更新股票 000670.SZ 的行情数据 -2026-01-17 23:23:52 - INFO - 股票 000670.SZ 现有最新日期: 20260105,将获取 20260106 至今的数据 -2026-01-17 23:23:52 - INFO - 未获取到股票 000670.SZ 的新数据 -2026-01-17 23:23:52 - INFO - 股票 000670.SZ 数据更新成功,最新日期: 20260105 -2026-01-17 23:23:53 - INFO - 找到 002131.SZ 在 20251217 至 20260117 期间的停牌数据: 1条 -2026-01-17 23:23:53 - INFO - 股票 002131.SZ 在 20260116 处于停牌状态 -2026-01-17 23:23:53 - INFO - 股票 002131.SZ 当前处于停牌状态 -2026-01-17 23:23:53 - INFO - 股票 002131.SZ 的最新行情日期 20260115 < 停牌开始日期 20260116,开始更新数据 -2026-01-17 23:23:53 - INFO - 开始更新股票 002131.SZ 的行情数据 -2026-01-17 23:23:53 - INFO - 股票 002131.SZ 现有最新日期: 20260115,将获取 20260116 至今的数据 -2026-01-17 23:23:53 - INFO - 未获取到股票 002131.SZ 的新数据 -2026-01-17 23:23:53 - INFO - 股票 002131.SZ 数据更新成功,最新日期: 20260115 -2026-01-17 23:23:53 - INFO - 找到 002155.SZ 在 20251217 至 20260117 期间的停牌数据: 5条 -2026-01-17 23:23:53 - INFO - 股票 002155.SZ 在 20260116 处于停牌状态 -2026-01-17 23:23:53 - INFO - 股票 002155.SZ 当前处于停牌状态 -2026-01-17 23:23:53 - INFO - 股票 002155.SZ 的最新行情日期 20260109 < 停牌开始日期 20260112,开始更新数据 -2026-01-17 23:23:53 - INFO - 开始更新股票 002155.SZ 的行情数据 -2026-01-17 23:23:53 - INFO - 股票 002155.SZ 现有最新日期: 20260109,将获取 20260110 至今的数据 -2026-01-17 23:23:53 - INFO - 未获取到股票 002155.SZ 的新数据 -2026-01-17 23:23:53 - INFO - 股票 002155.SZ 数据更新成功,最新日期: 20260109 -2026-01-17 23:23:53 - INFO - 找到 002931.SZ 在 20251217 至 20260117 期间的停牌数据: 9条 -2026-01-17 23:23:53 - INFO - 股票 002931.SZ 在 20260116 处于停牌状态 -2026-01-17 23:23:53 - INFO - 股票 002931.SZ 当前处于停牌状态 -2026-01-17 23:23:53 - INFO - 股票 002931.SZ 的最新行情日期 20260113 >= 停牌开始日期 20251218,数据完整,不输出报告 -2026-01-17 23:23:53 - INFO - 找到 300658.SZ 在 20251217 至 20260117 期间的停牌数据: 10条 -2026-01-17 23:23:53 - INFO - 股票 300658.SZ 在 20260116 处于停牌状态 -2026-01-17 23:23:53 - INFO - 股票 300658.SZ 当前处于停牌状态 -2026-01-17 23:23:53 - INFO - 股票 300658.SZ 的最新行情日期 20251231 < 停牌开始日期 20260105,开始更新数据 -2026-01-17 23:23:53 - INFO - 开始更新股票 300658.SZ 的行情数据 -2026-01-17 23:23:53 - INFO - 股票 300658.SZ 现有最新日期: 20251231,将获取 20260101 至今的数据 -2026-01-17 23:23:53 - INFO - 未获取到股票 300658.SZ 的新数据 -2026-01-17 23:23:53 - INFO - 股票 300658.SZ 数据更新成功,最新日期: 20251231 -2026-01-17 23:23:53 - INFO - 找到 601615.SH 在 20251217 至 20260117 期间的停牌数据: 4条 -2026-01-17 23:23:53 - INFO - 股票 601615.SH 在 20260116 处于停牌状态 -2026-01-17 23:23:53 - INFO - 股票 601615.SH 当前处于停牌状态 -2026-01-17 23:23:53 - INFO - 股票 601615.SH 的最新行情日期 20260112 < 停牌开始日期 20260113,开始更新数据 -2026-01-17 23:23:53 - INFO - 开始更新股票 601615.SH 的行情数据 -2026-01-17 23:23:53 - INFO - 股票 601615.SH 现有最新日期: 20260112,将获取 20260113 至今的数据 -2026-01-17 23:23:53 - INFO - 未获取到股票 601615.SH 的新数据 -2026-01-17 23:23:53 - INFO - 股票 601615.SH 数据更新成功,最新日期: 20260112 -2026-01-17 23:23:53 - INFO - 停牌检查完成,剩余 5 个需要输出报告的不完整个股 -2026-01-17 23:23:53 - INFO - 检查完成,共检查 2592 个文件 -2026-01-17 23:23:53 - INFO - 发现 5 个未更新到最新的数据文件 -2026-01-17 23:23:53 - INFO - 检查结果已输出到:market_data_check_result.csv -2026-01-17 23:27:35 - INFO - 日志文件已配置: market_data_check.log -2026-01-17 23:27:35 - INFO - 开始检查行情数据完整性,检查日期:20260117 -2026-01-17 23:27:35 - INFO - 正在加载交易日历缓存... -2026-01-17 23:27:36 - INFO - 成功获取并缓存交易日历: 20240118至20260216 -2026-01-17 23:27:36 - INFO - 交易日历缓存成功,共 761 条记录 -2026-01-17 23:27:36 - WARNING - 检查日期 20260117 不是交易日,正在寻找最近的前一个交易日... -2026-01-17 23:27:36 - INFO - 目标日期 20260117 的前一个交易日是 20260116 -2026-01-17 23:27:36 - INFO - 已将检查日期调整为:20260116 -2026-01-17 23:27:36 - INFO - 开始检查 2592 个数据文件... -2026-01-17 23:27:36 - INFO - 收集到的不完整文件数量: 6 -2026-01-17 23:27:36 - INFO - 前5个不完整文件示例: ['000670.SZ', '002131.SZ', '002155.SZ', '002931.SZ', '300658.SZ'] -2026-01-17 23:27:36 - INFO - 开始对 6 个数据不完整的个股进行停牌检查 -2026-01-17 23:27:36 - INFO - 找到 000670.SZ 在 20251217 至 20260117 期间的停牌数据: 9条 -2026-01-17 23:27:36 - INFO - 股票 000670.SZ 在 20260116 处于停牌状态 -2026-01-17 23:27:36 - INFO - 股票 000670.SZ 当前处于停牌状态 -2026-01-17 23:27:36 - INFO - 股票 000670.SZ 的最新行情日期 20260105 < 停牌开始日期 20260106,开始更新数据 -2026-01-17 23:27:36 - INFO - 开始更新股票 000670.SZ 的行情数据 -2026-01-17 23:27:36 - INFO - 股票 000670.SZ 现有最新日期: 20260105,将获取 20260106 至今的数据 -2026-01-17 23:27:37 - INFO - 未获取到股票 000670.SZ 的新数据 -2026-01-17 23:27:37 - INFO - 股票 000670.SZ 数据更新成功,最新日期: 20260105 -2026-01-17 23:27:37 - INFO - 找到 002131.SZ 在 20251217 至 20260117 期间的停牌数据: 1条 -2026-01-17 23:27:37 - INFO - 股票 002131.SZ 在 20260116 处于停牌状态 -2026-01-17 23:27:37 - INFO - 股票 002131.SZ 当前处于停牌状态 -2026-01-17 23:27:37 - INFO - 股票 002131.SZ 的最新行情日期 20260115 < 停牌开始日期 20260116,开始更新数据 -2026-01-17 23:27:37 - INFO - 开始更新股票 002131.SZ 的行情数据 -2026-01-17 23:27:37 - INFO - 股票 002131.SZ 现有最新日期: 20260115,将获取 20260116 至今的数据 -2026-01-17 23:27:37 - INFO - 未获取到股票 002131.SZ 的新数据 -2026-01-17 23:27:37 - INFO - 股票 002131.SZ 数据更新成功,最新日期: 20260115 -2026-01-17 23:27:37 - INFO - 找到 002155.SZ 在 20251217 至 20260117 期间的停牌数据: 5条 -2026-01-17 23:27:37 - INFO - 股票 002155.SZ 在 20260116 处于停牌状态 -2026-01-17 23:27:37 - INFO - 股票 002155.SZ 当前处于停牌状态 -2026-01-17 23:27:37 - INFO - 股票 002155.SZ 的最新行情日期 20260109 < 停牌开始日期 20260112,开始更新数据 -2026-01-17 23:27:37 - INFO - 开始更新股票 002155.SZ 的行情数据 -2026-01-17 23:27:37 - INFO - 股票 002155.SZ 现有最新日期: 20260109,将获取 20260110 至今的数据 -2026-01-17 23:27:37 - INFO - 未获取到股票 002155.SZ 的新数据 -2026-01-17 23:27:37 - INFO - 股票 002155.SZ 数据更新成功,最新日期: 20260109 -2026-01-17 23:27:37 - INFO - 找到 002931.SZ 在 20251217 至 20260117 期间的停牌数据: 9条 -2026-01-17 23:27:37 - INFO - 股票 002931.SZ 在 20260116 处于停牌状态 -2026-01-17 23:27:37 - INFO - 股票 002931.SZ 当前处于停牌状态 -2026-01-17 23:27:37 - INFO - 股票 002931.SZ 的最新行情日期 20260113 >= 停牌开始日期 20251218,数据完整,不输出报告 -2026-01-17 23:27:37 - INFO - 找到 300658.SZ 在 20251217 至 20260117 期间的停牌数据: 10条 -2026-01-17 23:27:37 - INFO - 股票 300658.SZ 在 20260116 处于停牌状态 -2026-01-17 23:27:37 - INFO - 股票 300658.SZ 当前处于停牌状态 -2026-01-17 23:27:37 - INFO - 股票 300658.SZ 的最新行情日期 20251231 < 停牌开始日期 20260105,开始更新数据 -2026-01-17 23:27:37 - INFO - 开始更新股票 300658.SZ 的行情数据 -2026-01-17 23:27:37 - INFO - 股票 300658.SZ 现有最新日期: 20251231,将获取 20260101 至今的数据 -2026-01-17 23:27:37 - INFO - 未获取到股票 300658.SZ 的新数据 -2026-01-17 23:27:37 - INFO - 股票 300658.SZ 数据更新成功,最新日期: 20251231 -2026-01-17 23:27:37 - INFO - 找到 601615.SH 在 20251217 至 20260117 期间的停牌数据: 4条 -2026-01-17 23:27:37 - INFO - 股票 601615.SH 在 20260116 处于停牌状态 -2026-01-17 23:27:37 - INFO - 股票 601615.SH 当前处于停牌状态 -2026-01-17 23:27:37 - INFO - 股票 601615.SH 的最新行情日期 20260112 < 停牌开始日期 20260113,开始更新数据 -2026-01-17 23:27:37 - INFO - 开始更新股票 601615.SH 的行情数据 -2026-01-17 23:27:37 - INFO - 股票 601615.SH 现有最新日期: 20260112,将获取 20260113 至今的数据 -2026-01-17 23:27:38 - INFO - 未获取到股票 601615.SH 的新数据 -2026-01-17 23:27:38 - INFO - 股票 601615.SH 数据更新成功,最新日期: 20260112 -2026-01-17 23:27:38 - INFO - 停牌检查完成,剩余 5 个需要输出报告的不完整个股 -2026-01-17 23:28:37 - INFO - 日志文件已配置: market_data_check.log -2026-01-17 23:28:37 - INFO - 开始检查行情数据完整性,检查日期:20260117 -2026-01-17 23:28:37 - INFO - 正在加载交易日历缓存... -2026-01-17 23:28:37 - INFO - 成功获取并缓存交易日历: 20240118至20260216 -2026-01-17 23:28:37 - INFO - 交易日历缓存成功,共 761 条记录 -2026-01-17 23:28:37 - WARNING - 检查日期 20260117 不是交易日,正在寻找最近的前一个交易日... -2026-01-17 23:28:37 - INFO - 目标日期 20260117 的前一个交易日是 20260116 -2026-01-17 23:28:37 - INFO - 已将检查日期调整为:20260116 -2026-01-17 23:28:37 - INFO - 开始检查 2592 个数据文件... -2026-01-17 23:28:37 - INFO - 收集到的不完整文件数量: 6 -2026-01-17 23:28:37 - INFO - 前5个不完整文件示例: ['000670.SZ', '002131.SZ', '002155.SZ', '002931.SZ', '300658.SZ'] -2026-01-17 23:28:37 - INFO - 开始对 6 个数据不完整的个股进行停牌检查 -2026-01-17 23:28:37 - INFO - 找到 000670.SZ 在 20251217 至 20260117 期间的停牌数据: 9条 -2026-01-17 23:28:37 - INFO - 股票 000670.SZ 在 20260116 处于停牌状态 -2026-01-17 23:28:37 - INFO - 股票 000670.SZ 当前处于停牌状态 -2026-01-17 23:28:37 - INFO - 股票 000670.SZ 的最新行情日期 20260105 < 停牌开始日期 20260106,开始更新数据 -2026-01-17 23:28:37 - INFO - 开始更新股票 000670.SZ 的行情数据 -2026-01-17 23:28:37 - INFO - 股票 000670.SZ 现有最新日期: 20260105,将获取 20260106 至今的数据 -2026-01-17 23:28:38 - INFO - 未获取到股票 000670.SZ 的新数据 -2026-01-17 23:28:38 - INFO - 股票 000670.SZ 数据更新成功,最新日期: 20260105 -2026-01-17 23:28:38 - INFO - 找到 002131.SZ 在 20251217 至 20260117 期间的停牌数据: 1条 -2026-01-17 23:28:38 - INFO - 股票 002131.SZ 在 20260116 处于停牌状态 -2026-01-17 23:28:38 - INFO - 股票 002131.SZ 当前处于停牌状态 -2026-01-17 23:28:38 - INFO - 股票 002131.SZ 的最新行情日期 20260115 < 停牌开始日期 20260116,开始更新数据 -2026-01-17 23:28:38 - INFO - 开始更新股票 002131.SZ 的行情数据 -2026-01-17 23:28:38 - INFO - 股票 002131.SZ 现有最新日期: 20260115,将获取 20260116 至今的数据 -2026-01-17 23:28:38 - INFO - 未获取到股票 002131.SZ 的新数据 -2026-01-17 23:28:38 - INFO - 股票 002131.SZ 数据更新成功,最新日期: 20260115 -2026-01-17 23:28:38 - INFO - 找到 002155.SZ 在 20251217 至 20260117 期间的停牌数据: 5条 -2026-01-17 23:28:38 - INFO - 股票 002155.SZ 在 20260116 处于停牌状态 -2026-01-17 23:28:38 - INFO - 股票 002155.SZ 当前处于停牌状态 -2026-01-17 23:28:38 - INFO - 股票 002155.SZ 的最新行情日期 20260109 < 停牌开始日期 20260112,开始更新数据 -2026-01-17 23:28:38 - INFO - 开始更新股票 002155.SZ 的行情数据 -2026-01-17 23:28:38 - INFO - 股票 002155.SZ 现有最新日期: 20260109,将获取 20260110 至今的数据 -2026-01-17 23:28:38 - INFO - 未获取到股票 002155.SZ 的新数据 -2026-01-17 23:28:38 - INFO - 股票 002155.SZ 数据更新成功,最新日期: 20260109 -2026-01-17 23:28:38 - INFO - 找到 002931.SZ 在 20251217 至 20260117 期间的停牌数据: 9条 -2026-01-17 23:28:38 - INFO - 股票 002931.SZ 在 20260116 处于停牌状态 -2026-01-17 23:28:38 - INFO - 股票 002931.SZ 当前处于停牌状态 -2026-01-17 23:28:38 - INFO - 股票 002931.SZ 的最新行情日期 20260113 >= 停牌开始日期 20251218,数据完整,不输出报告 -2026-01-17 23:28:38 - INFO - 找到 300658.SZ 在 20251217 至 20260117 期间的停牌数据: 10条 -2026-01-17 23:28:38 - INFO - 股票 300658.SZ 在 20260116 处于停牌状态 -2026-01-17 23:28:38 - INFO - 股票 300658.SZ 当前处于停牌状态 -2026-01-17 23:28:38 - INFO - 股票 300658.SZ 的最新行情日期 20251231 < 停牌开始日期 20260105,开始更新数据 -2026-01-17 23:28:38 - INFO - 开始更新股票 300658.SZ 的行情数据 -2026-01-17 23:28:38 - INFO - 股票 300658.SZ 现有最新日期: 20251231,将获取 20260101 至今的数据 -2026-01-17 23:28:38 - INFO - 未获取到股票 300658.SZ 的新数据 -2026-01-17 23:28:38 - INFO - 股票 300658.SZ 数据更新成功,最新日期: 20251231 -2026-01-17 23:28:38 - INFO - 找到 601615.SH 在 20251217 至 20260117 期间的停牌数据: 4条 -2026-01-17 23:28:38 - INFO - 股票 601615.SH 在 20260116 处于停牌状态 -2026-01-17 23:28:38 - INFO - 股票 601615.SH 当前处于停牌状态 -2026-01-17 23:28:38 - INFO - 股票 601615.SH 的最新行情日期 20260112 < 停牌开始日期 20260113,开始更新数据 -2026-01-17 23:28:38 - INFO - 开始更新股票 601615.SH 的行情数据 -2026-01-17 23:28:38 - INFO - 股票 601615.SH 现有最新日期: 20260112,将获取 20260113 至今的数据 -2026-01-17 23:28:39 - INFO - 未获取到股票 601615.SH 的新数据 -2026-01-17 23:28:39 - INFO - 股票 601615.SH 数据更新成功,最新日期: 20260112 -2026-01-17 23:28:39 - INFO - 停牌检查完成,剩余 5 个需要输出报告的不完整个股 -2026-01-17 23:28:39 - INFO - 检查完成,共检查 2592 个文件 -2026-01-17 23:28:39 - INFO - 发现 5 个未更新到最新的数据文件 -2026-01-17 23:28:39 - INFO - 检查结果已输出到:market_data_check_result.csv +2026-01-21 01:29:07 - INFO - 日志文件已配置: market_data_check.log +2026-01-21 01:29:07 - INFO - 当前时间2026-01-21 01:29:07早于16:00,检查日期调整为前一天:20260120 +2026-01-21 01:29:07 - INFO - 正在加载交易日历缓存... +2026-01-21 01:29:07 - INFO - 成功获取并缓存交易日历: 20240122至20260220 +2026-01-21 01:29:07 - INFO - 交易日历缓存成功,共 761 条记录 +2026-01-21 01:29:07 - INFO - 检查日期 20260120 是交易日 +2026-01-21 01:29:07 - INFO - 开始检查 2592 个数据文件... +2026-01-21 01:29:09 - INFO - 收集到的不完整文件数量: 2592 +2026-01-21 01:29:09 - INFO - 前5个不完整文件示例: ['000002.SZ', '000006.SZ', '000008.SZ', '000010.SZ', '000012.SZ'] +2026-01-21 01:29:09 - INFO - 开始对 2592 个数据不完整的个股进行停牌检查 +2026-01-21 01:29:09 - INFO - 未找到 000002.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:10 - INFO - 未找到 000006.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:10 - INFO - 未找到 000008.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:10 - INFO - 未找到 000010.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:10 - INFO - 未找到 000012.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:11 - INFO - 未找到 000016.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:11 - INFO - 未找到 000019.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:11 - INFO - 未找到 000021.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:11 - INFO - 未找到 000026.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:11 - INFO - 未找到 000028.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:11 - INFO - 未找到 000030.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:12 - INFO - 未找到 000032.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:12 - INFO - 未找到 000035.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:12 - INFO - 未找到 000037.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:13 - INFO - 未找到 000042.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:13 - INFO - 未找到 000048.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:13 - INFO - 未找到 000050.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:13 - INFO - 未找到 000056.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:13 - INFO - 未找到 000059.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:14 - INFO - 未找到 000061.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:14 - INFO - 未找到 000063.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:14 - INFO - 未找到 000066.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:14 - INFO - 未找到 000069.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:15 - INFO - 未找到 000078.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:15 - INFO - 未找到 000089.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:15 - INFO - 未找到 000096.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:15 - INFO - 未找到 000100.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:15 - INFO - 未找到 000153.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:16 - INFO - 未找到 000156.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:16 - INFO - 未找到 000158.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:16 - INFO - 未找到 000166.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:16 - INFO - 未找到 000333.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:16 - INFO - 未找到 000400.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:16 - INFO - 未找到 000402.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:16 - INFO - 未找到 000404.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:17 - INFO - 未找到 000408.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:17 - INFO - 未找到 000410.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:17 - INFO - 未找到 000415.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:17 - INFO - 未找到 000419.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:17 - INFO - 未找到 000421.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:17 - INFO - 未找到 000423.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:17 - INFO - 未找到 000426.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:18 - INFO - 未找到 000429.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:18 - INFO - 未找到 000488.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:18 - INFO - 未找到 000501.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:19 - INFO - 未找到 000504.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:19 - INFO - 未找到 000506.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:19 - INFO - 未找到 000509.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:19 - INFO - 未找到 000513.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:20 - INFO - 未找到 000516.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:20 - INFO - 未找到 000518.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:20 - INFO - 未找到 000520.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:21 - INFO - 未找到 000523.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:21 - INFO - 未找到 000525.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:21 - INFO - 未找到 000528.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:21 - INFO - 未找到 000530.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:22 - INFO - 未找到 000532.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:22 - INFO - 未找到 000534.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:22 - INFO - 未找到 000537.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:22 - INFO - 未找到 000539.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:22 - INFO - 未找到 000543.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:22 - INFO - 未找到 000545.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:22 - INFO - 未找到 000547.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:23 - INFO - 未找到 000550.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:23 - INFO - 未找到 000552.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:23 - INFO - 未找到 000554.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:23 - INFO - 未找到 000557.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:23 - INFO - 未找到 000559.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:23 - INFO - 未找到 000561.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:24 - INFO - 未找到 000564.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:24 - INFO - 未找到 000566.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:24 - INFO - 未找到 000568.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:24 - INFO - 未找到 000571.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:24 - INFO - 未找到 000573.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:25 - INFO - 未找到 000581.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:25 - INFO - 未找到 000586.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:25 - INFO - 未找到 000590.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:25 - INFO - 未找到 000592.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:25 - INFO - 未找到 000595.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:27 - INFO - 未找到 000597.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:27 - INFO - 未找到 000599.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:27 - INFO - 未找到 000601.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:27 - INFO - 未找到 000605.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:27 - INFO - 找到 000608.SZ 在 20251221 至 20260121 期间的停牌数据: 6条 +2026-01-21 01:29:27 - INFO - 股票 000608.SZ 在 20260120 未处于停牌状态 +2026-01-21 01:29:28 - INFO - 未找到 000610.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:28 - INFO - 找到 000615.SZ 在 20251221 至 20260121 期间的停牌数据: 2条 +2026-01-21 01:29:28 - INFO - 股票 000615.SZ 在 20260120 未处于停牌状态 +2026-01-21 01:29:28 - INFO - 未找到 000619.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:28 - INFO - 未找到 000623.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:29 - INFO - 未找到 000626.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:29 - INFO - 未找到 000629.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:29 - INFO - 未找到 000631.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:29 - INFO - 未找到 000633.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:29 - INFO - 未找到 000636.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:30 - INFO - 未找到 000638.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:30 - INFO - 未找到 000650.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:30 - INFO - 未找到 000652.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:30 - INFO - 未找到 000656.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:30 - INFO - 未找到 000659.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:30 - INFO - 未找到 000663.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:31 - INFO - 未找到 000668.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:31 - INFO - 找到 000670.SZ 在 20251221 至 20260121 期间的停牌数据: 11条 +2026-01-21 01:29:31 - INFO - 股票 000670.SZ 在 20260120 未处于停牌状态 +2026-01-21 01:29:31 - INFO - 未找到 000676.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:31 - INFO - 未找到 000678.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:32 - INFO - 未找到 000680.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:32 - INFO - 未找到 000682.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:32 - INFO - 未找到 000685.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:32 - INFO - 未找到 000688.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:33 - INFO - 找到 000691.SZ 在 20251221 至 20260121 期间的停牌数据: 2条 +2026-01-21 01:29:33 - INFO - 股票 000691.SZ 在 20260120 未处于停牌状态 +2026-01-21 01:29:33 - INFO - 未找到 000695.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:33 - INFO - 未找到 000698.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:33 - INFO - 未找到 000701.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:33 - INFO - 未找到 000703.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:33 - INFO - 未找到 000707.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:33 - INFO - 未找到 000709.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:33 - INFO - 未找到 000711.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:34 - INFO - 未找到 000713.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:34 - INFO - 未找到 000716.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:34 - INFO - 未找到 000718.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:34 - INFO - 未找到 000720.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:34 - INFO - 未找到 000722.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:35 - INFO - 未找到 000725.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:35 - INFO - 未找到 000727.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:35 - INFO - 未找到 000729.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:35 - INFO - 未找到 000733.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:35 - INFO - 未找到 000736.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:36 - INFO - 未找到 000738.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:36 - INFO - 未找到 000750.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:36 - INFO - 未找到 000752.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:37 - INFO - 未找到 000755.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:37 - INFO - 未找到 000757.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:37 - INFO - 未找到 000759.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:37 - INFO - 未找到 000762.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:38 - INFO - 未找到 000767.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:38 - INFO - 未找到 000776.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:38 - INFO - 未找到 000778.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:39 - INFO - 未找到 000782.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:39 - INFO - 未找到 000785.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:39 - INFO - 未找到 000788.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:39 - INFO - 未找到 000790.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:40 - INFO - 未找到 000792.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:40 - INFO - 未找到 000795.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:40 - INFO - 未找到 000797.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:40 - INFO - 未找到 000799.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:41 - INFO - 未找到 000801.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:41 - INFO - 未找到 000803.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:41 - INFO - 未找到 000809.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:42 - INFO - 未找到 000811.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:42 - INFO - 未找到 000813.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:42 - INFO - 未找到 000816.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:42 - INFO - 未找到 000819.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:42 - INFO - 找到 000821.SZ 在 20251221 至 20260121 期间的停牌数据: 2条 +2026-01-21 01:29:42 - INFO - 股票 000821.SZ 在 20260120 未处于停牌状态 +2026-01-21 01:29:43 - INFO - 未找到 000823.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:43 - INFO - 未找到 000826.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:43 - INFO - 未找到 000829.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:43 - INFO - 未找到 000831.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:44 - INFO - 未找到 000837.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:44 - INFO - 未找到 000839.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:44 - INFO - 未找到 000850.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:44 - INFO - 未找到 000856.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:44 - INFO - 未找到 000859.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:44 - INFO - 未找到 000862.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:44 - INFO - 未找到 000868.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:45 - INFO - 未找到 000875.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:45 - INFO - 未找到 000877.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:45 - INFO - 未找到 000880.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:45 - INFO - 未找到 000882.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:46 - INFO - 未找到 000885.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:46 - INFO - 未找到 000887.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:46 - INFO - 未找到 000889.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:47 - INFO - 未找到 000892.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:47 - INFO - 未找到 000895.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:47 - INFO - 未找到 000898.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:47 - INFO - 未找到 000900.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:47 - INFO - 未找到 000902.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:47 - INFO - 未找到 000905.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:47 - INFO - 未找到 000908.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:47 - INFO - 未找到 000910.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:48 - INFO - 未找到 000912.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:48 - INFO - 未找到 000915.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:48 - INFO - 未找到 000919.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:48 - INFO - 未找到 000921.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:48 - INFO - 未找到 000923.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:49 - INFO - 未找到 000926.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:49 - INFO - 未找到 000928.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:49 - INFO - 未找到 000930.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:49 - INFO - 未找到 000932.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:50 - INFO - 未找到 000935.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:50 - INFO - 未找到 000937.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:50 - INFO - 未找到 000948.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:50 - INFO - 未找到 000950.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:51 - INFO - 未找到 000952.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:51 - INFO - 未找到 000955.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:51 - INFO - 未找到 000958.SZ 在 20251221 至 20260121 期间的停牌数据 +2026-01-21 01:29:51 - INFO - 未找到 000960.SZ 在 20251221 至 20260121 期间的停牌数据 diff --git a/market_data_check.log.2026-01-17 b/market_data_check.log.2026-01-17 new file mode 100644 index 0000000..5b90f68 --- /dev/null +++ b/market_data_check.log.2026-01-17 @@ -0,0 +1,518 @@ +2026-01-17 22:05:09 - INFO - 日志文件已配置: market_data_check.log +2026-01-17 22:05:09 - INFO - 开始检查行情数据完整性,检查日期:20260117 +2026-01-17 22:05:09 - INFO - 正在加载交易日历缓存... +2026-01-17 22:05:09 - INFO - 成功获取并缓存交易日历: 20240118至20260216 +2026-01-17 22:05:09 - INFO - 交易日历缓存成功,共 761 条记录 +2026-01-17 22:05:09 - WARNING - 检查日期 20260117 不是交易日,可能所有文件都未更新 +2026-01-17 22:05:09 - INFO - 开始检查 2592 个数据文件... +2026-01-17 22:05:11 - INFO - 收集到的不完整文件数量: 2592 +2026-01-17 22:05:11 - INFO - 前5个不完整文件示例: ['000002.SZ', '000006.SZ', '000008.SZ', '000010.SZ', '000012.SZ'] +2026-01-17 22:05:11 - INFO - 开始对 2592 个数据不完整的个股进行停牌检查 +2026-01-17 22:05:11 - INFO - 未找到 000002.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:11 - INFO - 未找到 000006.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:11 - INFO - 未找到 000008.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:11 - INFO - 未找到 000010.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:11 - INFO - 未找到 000012.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:11 - INFO - 未找到 000016.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:11 - INFO - 未找到 000019.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:11 - INFO - 未找到 000021.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:12 - INFO - 未找到 000026.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:12 - INFO - 未找到 000028.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:12 - INFO - 未找到 000030.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:12 - INFO - 未找到 000032.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:12 - INFO - 未找到 000035.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:12 - INFO - 未找到 000037.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:12 - INFO - 未找到 000042.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:12 - INFO - 未找到 000048.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:12 - INFO - 未找到 000050.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:13 - INFO - 未找到 000056.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:13 - INFO - 未找到 000059.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:13 - INFO - 未找到 000061.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:13 - INFO - 未找到 000063.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:13 - INFO - 未找到 000066.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:13 - INFO - 未找到 000069.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:13 - INFO - 未找到 000078.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:13 - INFO - 未找到 000089.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:13 - INFO - 未找到 000096.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:14 - INFO - 未找到 000100.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:14 - INFO - 未找到 000153.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:14 - INFO - 未找到 000156.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:14 - INFO - 未找到 000158.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:14 - INFO - 未找到 000166.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:14 - INFO - 未找到 000333.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:14 - INFO - 未找到 000400.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:14 - INFO - 未找到 000402.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:14 - INFO - 未找到 000404.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:15 - INFO - 未找到 000408.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:15 - INFO - 未找到 000410.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:15 - INFO - 未找到 000415.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:15 - INFO - 未找到 000419.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:15 - INFO - 未找到 000421.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:15 - INFO - 未找到 000423.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:15 - INFO - 未找到 000426.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:15 - INFO - 未找到 000429.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:15 - INFO - 未找到 000488.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:15 - INFO - 未找到 000501.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:16 - INFO - 未找到 000504.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:16 - INFO - 未找到 000506.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:16 - INFO - 未找到 000509.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:16 - INFO - 未找到 000513.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:16 - INFO - 未找到 000516.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:16 - INFO - 未找到 000518.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:16 - INFO - 未找到 000520.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:16 - INFO - 未找到 000523.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:16 - INFO - 未找到 000525.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:17 - INFO - 未找到 000528.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:17 - INFO - 未找到 000530.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:17 - INFO - 未找到 000532.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:17 - INFO - 未找到 000534.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:17 - INFO - 未找到 000537.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:17 - INFO - 未找到 000539.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:17 - INFO - 未找到 000543.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:17 - INFO - 未找到 000545.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:18 - INFO - 未找到 000547.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:18 - INFO - 未找到 000550.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:18 - INFO - 未找到 000552.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:18 - INFO - 未找到 000554.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:18 - INFO - 未找到 000557.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:18 - INFO - 未找到 000559.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:18 - INFO - 未找到 000561.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:18 - INFO - 未找到 000564.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:18 - INFO - 未找到 000566.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:18 - INFO - 未找到 000568.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:19 - INFO - 未找到 000571.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:19 - INFO - 未找到 000573.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:19 - INFO - 未找到 000581.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:19 - INFO - 未找到 000586.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:19 - INFO - 未找到 000590.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:19 - INFO - 未找到 000592.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:19 - INFO - 未找到 000595.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:19 - INFO - 未找到 000597.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:19 - INFO - 未找到 000599.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:20 - INFO - 未找到 000601.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:20 - INFO - 未找到 000605.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:20 - INFO - 找到 000608.SZ 在 20251218 至 20260216 期间的停牌数据: 6条 +2026-01-17 22:05:20 - INFO - 股票 000608.SZ 在 20260117 未处于停牌状态 +2026-01-17 22:05:20 - INFO - 未找到 000610.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:20 - INFO - 找到 000615.SZ 在 20251218 至 20260216 期间的停牌数据: 2条 +2026-01-17 22:05:20 - INFO - 股票 000615.SZ 在 20260117 未处于停牌状态 +2026-01-17 22:05:20 - INFO - 未找到 000619.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:20 - INFO - 未找到 000623.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:20 - INFO - 未找到 000626.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:20 - INFO - 未找到 000629.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:21 - INFO - 未找到 000631.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:21 - INFO - 未找到 000633.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:21 - INFO - 未找到 000636.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:21 - INFO - 未找到 000638.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:21 - INFO - 未找到 000650.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:21 - INFO - 未找到 000652.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:21 - INFO - 未找到 000656.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:21 - INFO - 未找到 000659.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:21 - INFO - 未找到 000663.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:22 - INFO - 未找到 000668.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:22 - INFO - 找到 000670.SZ 在 20251218 至 20260216 期间的停牌数据: 9条 +2026-01-17 22:05:22 - INFO - 股票 000670.SZ 在 20260117 未处于停牌状态 +2026-01-17 22:05:22 - INFO - 未找到 000676.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:22 - INFO - 未找到 000678.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:22 - INFO - 未找到 000680.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:22 - INFO - 未找到 000682.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:22 - INFO - 未找到 000685.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:22 - INFO - 未找到 000688.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:22 - INFO - 找到 000691.SZ 在 20251218 至 20260216 期间的停牌数据: 2条 +2026-01-17 22:05:22 - INFO - 股票 000691.SZ 在 20260117 未处于停牌状态 +2026-01-17 22:05:22 - INFO - 未找到 000695.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:23 - INFO - 未找到 000698.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:23 - INFO - 未找到 000701.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:23 - INFO - 未找到 000703.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:23 - INFO - 未找到 000707.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:23 - INFO - 未找到 000709.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:23 - INFO - 未找到 000711.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:23 - INFO - 未找到 000713.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:23 - INFO - 未找到 000716.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:23 - INFO - 未找到 000718.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:24 - INFO - 未找到 000720.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:24 - INFO - 未找到 000722.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:24 - INFO - 未找到 000725.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:24 - INFO - 未找到 000727.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:24 - INFO - 未找到 000729.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:24 - INFO - 未找到 000733.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:24 - INFO - 未找到 000736.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:24 - INFO - 未找到 000738.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:24 - INFO - 未找到 000750.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:25 - INFO - 未找到 000752.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:25 - INFO - 未找到 000755.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:25 - INFO - 未找到 000757.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:25 - INFO - 未找到 000759.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:25 - INFO - 未找到 000762.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:25 - INFO - 未找到 000767.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:25 - INFO - 未找到 000776.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:25 - INFO - 未找到 000778.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:25 - INFO - 未找到 000782.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:26 - INFO - 未找到 000785.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:26 - INFO - 未找到 000788.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:26 - INFO - 未找到 000790.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:26 - INFO - 未找到 000792.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:26 - INFO - 未找到 000795.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:26 - INFO - 未找到 000797.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:26 - INFO - 未找到 000799.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:26 - INFO - 未找到 000801.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:26 - INFO - 未找到 000803.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:26 - INFO - 未找到 000809.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:27 - INFO - 未找到 000811.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:27 - INFO - 未找到 000813.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:27 - INFO - 未找到 000816.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:27 - INFO - 未找到 000819.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:27 - INFO - 找到 000821.SZ 在 20251218 至 20260216 期间的停牌数据: 2条 +2026-01-17 22:05:27 - INFO - 股票 000821.SZ 在 20260117 未处于停牌状态 +2026-01-17 22:05:27 - INFO - 未找到 000823.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:27 - INFO - 未找到 000826.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:27 - INFO - 未找到 000829.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:27 - INFO - 未找到 000831.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:28 - INFO - 未找到 000837.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:28 - INFO - 未找到 000839.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:28 - INFO - 未找到 000850.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:28 - INFO - 未找到 000856.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:28 - INFO - 未找到 000859.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:28 - INFO - 未找到 000862.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:28 - INFO - 未找到 000868.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:28 - INFO - 未找到 000875.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:28 - INFO - 未找到 000877.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:05:29 - INFO - 未找到 000880.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:31:40 - INFO - 日志文件已配置: market_data_check.log +2026-01-17 22:31:40 - INFO - 开始检查行情数据完整性,检查日期:20260117 +2026-01-17 22:31:40 - INFO - 正在加载交易日历缓存... +2026-01-17 22:31:40 - INFO - 成功获取并缓存交易日历: 20240118至20260216 +2026-01-17 22:31:40 - INFO - 交易日历缓存成功,共 761 条记录 +2026-01-17 22:31:40 - WARNING - 检查日期 20260117 不是交易日,可能所有文件都未更新 +2026-01-17 22:31:40 - INFO - 开始检查 2592 个数据文件... +2026-01-17 22:31:42 - INFO - 收集到的不完整文件数量: 2592 +2026-01-17 22:31:42 - INFO - 前5个不完整文件示例: ['000002.SZ', '000006.SZ', '000008.SZ', '000010.SZ', '000012.SZ'] +2026-01-17 22:31:42 - INFO - 开始对 2592 个数据不完整的个股进行停牌检查 +2026-01-17 22:31:42 - INFO - 未找到 000002.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:31:42 - INFO - 未找到 000006.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:31:42 - INFO - 未找到 000008.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:31:42 - INFO - 未找到 000010.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:31:42 - INFO - 未找到 000012.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:31:42 - INFO - 未找到 000016.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:31:42 - INFO - 未找到 000019.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:31:42 - INFO - 未找到 000021.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:31:42 - INFO - 未找到 000026.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:31:43 - INFO - 未找到 000028.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:31:43 - INFO - 未找到 000030.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:31:43 - INFO - 未找到 000032.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:31:43 - INFO - 未找到 000035.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:31:43 - INFO - 未找到 000037.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:31:43 - INFO - 未找到 000042.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:31:43 - INFO - 未找到 000048.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:31:43 - INFO - 未找到 000050.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:31:43 - INFO - 未找到 000056.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:31:44 - INFO - 未找到 000059.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:31:44 - INFO - 未找到 000061.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:31:44 - INFO - 未找到 000063.SZ 在 20251218 至 20260216 期间的停牌数据 +2026-01-17 22:34:16 - INFO - 日志文件已配置: market_data_check.log +2026-01-17 22:34:17 - INFO - 未找到 000001.SZ 在 20251216 至 20260117 期间的停牌数据 +2026-01-17 22:48:38 - INFO - 日志文件已配置: market_data_check.log +2026-01-17 22:48:38 - INFO - 开始检查行情数据完整性,检查日期:20260117 +2026-01-17 22:48:38 - INFO - 正在加载交易日历缓存... +2026-01-17 22:48:39 - INFO - 成功获取并缓存交易日历: 20240118至20260216 +2026-01-17 22:48:39 - INFO - 交易日历缓存成功,共 761 条记录 +2026-01-17 22:48:39 - WARNING - 检查日期 20260117 不是交易日,可能所有文件都未更新 +2026-01-17 22:48:39 - INFO - 开始检查 2592 个数据文件... +2026-01-17 22:48:40 - INFO - 收集到的不完整文件数量: 2592 +2026-01-17 22:48:40 - INFO - 前5个不完整文件示例: ['000002.SZ', '000006.SZ', '000008.SZ', '000010.SZ', '000012.SZ'] +2026-01-17 22:48:40 - INFO - 开始对 2592 个数据不完整的个股进行停牌检查 +2026-01-17 22:48:40 - INFO - 未找到 000002.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:40 - INFO - 未找到 000006.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:40 - INFO - 未找到 000008.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:40 - INFO - 未找到 000010.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:40 - INFO - 未找到 000012.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:41 - INFO - 未找到 000016.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:41 - INFO - 未找到 000019.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:41 - INFO - 未找到 000021.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:41 - INFO - 未找到 000026.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:41 - INFO - 未找到 000028.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:41 - INFO - 未找到 000030.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:41 - INFO - 未找到 000032.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:41 - INFO - 未找到 000035.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:41 - INFO - 未找到 000037.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:41 - INFO - 未找到 000042.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:42 - INFO - 未找到 000048.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:42 - INFO - 未找到 000050.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:42 - INFO - 未找到 000056.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:42 - INFO - 未找到 000059.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:42 - INFO - 未找到 000061.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:42 - INFO - 未找到 000063.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:42 - INFO - 未找到 000066.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:42 - INFO - 未找到 000069.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:42 - INFO - 未找到 000078.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:43 - INFO - 未找到 000089.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:43 - INFO - 未找到 000096.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:43 - INFO - 未找到 000100.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 22:48:43 - INFO - 未找到 000153.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 23:07:00 - INFO - 日志文件已配置: market_data_check.log +2026-01-17 23:07:00 - INFO - 开始检查行情数据完整性,检查日期:20260117 +2026-01-17 23:07:00 - INFO - 正在加载交易日历缓存... +2026-01-17 23:07:01 - INFO - 成功获取并缓存交易日历: 20240118至20260216 +2026-01-17 23:07:01 - INFO - 交易日历缓存成功,共 761 条记录 +2026-01-17 23:07:01 - WARNING - 检查日期 20260117 不是交易日,可能所有文件都未更新 +2026-01-17 23:07:01 - INFO - 开始检查 2592 个数据文件... +2026-01-17 23:07:02 - INFO - 收集到的不完整文件数量: 2592 +2026-01-17 23:07:02 - INFO - 前5个不完整文件示例: ['000002.SZ', '000006.SZ', '000008.SZ', '000010.SZ', '000012.SZ'] +2026-01-17 23:07:02 - INFO - 开始对 2592 个数据不完整的个股进行停牌检查 +2026-01-17 23:07:02 - INFO - 未找到 000002.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 23:07:02 - INFO - 未找到 000006.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 23:07:02 - INFO - 未找到 000008.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 23:07:02 - INFO - 未找到 000010.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 23:07:02 - INFO - 未找到 000012.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 23:07:02 - INFO - 未找到 000016.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 23:07:02 - INFO - 未找到 000019.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 23:07:03 - INFO - 未找到 000021.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 23:07:03 - INFO - 未找到 000026.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 23:07:03 - INFO - 未找到 000028.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 23:07:03 - INFO - 未找到 000030.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 23:07:03 - INFO - 未找到 000032.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 23:07:03 - INFO - 未找到 000035.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 23:07:03 - INFO - 未找到 000037.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 23:07:03 - INFO - 未找到 000042.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 23:07:03 - INFO - 未找到 000048.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 23:07:04 - INFO - 未找到 000050.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 23:07:04 - INFO - 未找到 000056.SZ 在 20251218 至 20260117 期间的停牌数据 +2026-01-17 23:10:59 - INFO - 日志文件已配置: market_data_check.log +2026-01-17 23:10:59 - INFO - 开始检查行情数据完整性,检查日期:20260117 +2026-01-17 23:10:59 - INFO - 正在加载交易日历缓存... +2026-01-17 23:11:05 - INFO - 成功获取并缓存交易日历: 20240118至20260216 +2026-01-17 23:11:05 - INFO - 交易日历缓存成功,共 761 条记录 +2026-01-17 23:11:05 - WARNING - 检查日期 20260117 不是交易日,正在寻找最近的前一个交易日... +2026-01-17 23:11:05 - INFO - 目标日期 20260117 的前一个交易日是 20260116 +2026-01-17 23:11:05 - INFO - 已将检查日期调整为:20260116 +2026-01-17 23:11:05 - INFO - 开始检查 2592 个数据文件... +2026-01-17 23:11:05 - INFO - 收集到的不完整文件数量: 6 +2026-01-17 23:11:05 - INFO - 前5个不完整文件示例: ['000670.SZ', '002131.SZ', '002155.SZ', '002931.SZ', '300658.SZ'] +2026-01-17 23:11:05 - INFO - 开始对 6 个数据不完整的个股进行停牌检查 +2026-01-17 23:11:10 - INFO - 找到 000670.SZ 在 20251217 至 20260117 期间的停牌数据: 9条 +2026-01-17 23:11:10 - INFO - 股票 000670.SZ 在 20260116 处于停牌状态 +2026-01-17 23:11:10 - INFO - 股票 000670.SZ 当前处于停牌状态 +2026-01-17 23:11:10 - INFO - 股票 000670.SZ 的最新行情日期 20260105 < 停牌开始日期 20260106,开始更新数据 +2026-01-17 23:11:10 - INFO - 开始更新股票 000670.SZ 的行情数据 +2026-01-17 23:11:10 - INFO - 股票 000670.SZ 现有最新日期: 20260105,将获取 20260106 至今的数据 +2026-01-17 23:11:16 - INFO - 未获取到股票 000670.SZ 的新数据 +2026-01-17 23:11:16 - INFO - 股票 000670.SZ 数据更新成功,最新日期: 20260105 +2026-01-17 23:11:21 - INFO - 找到 002131.SZ 在 20251217 至 20260117 期间的停牌数据: 1条 +2026-01-17 23:11:21 - INFO - 股票 002131.SZ 在 20260116 处于停牌状态 +2026-01-17 23:11:21 - INFO - 股票 002131.SZ 当前处于停牌状态 +2026-01-17 23:11:21 - INFO - 股票 002131.SZ 的最新行情日期 20260115 < 停牌开始日期 20260116,开始更新数据 +2026-01-17 23:11:21 - INFO - 开始更新股票 002131.SZ 的行情数据 +2026-01-17 23:11:21 - INFO - 股票 002131.SZ 现有最新日期: 20260115,将获取 20260116 至今的数据 +2026-01-17 23:11:27 - INFO - 未获取到股票 002131.SZ 的新数据 +2026-01-17 23:11:27 - INFO - 股票 002131.SZ 数据更新成功,最新日期: 20260115 +2026-01-17 23:11:32 - INFO - 找到 002155.SZ 在 20251217 至 20260117 期间的停牌数据: 5条 +2026-01-17 23:11:32 - INFO - 股票 002155.SZ 在 20260116 处于停牌状态 +2026-01-17 23:11:32 - INFO - 股票 002155.SZ 当前处于停牌状态 +2026-01-17 23:11:32 - INFO - 股票 002155.SZ 的最新行情日期 20260109 < 停牌开始日期 20260112,开始更新数据 +2026-01-17 23:11:32 - INFO - 开始更新股票 002155.SZ 的行情数据 +2026-01-17 23:11:32 - INFO - 股票 002155.SZ 现有最新日期: 20260109,将获取 20260110 至今的数据 +2026-01-17 23:11:37 - INFO - 未获取到股票 002155.SZ 的新数据 +2026-01-17 23:11:37 - INFO - 股票 002155.SZ 数据更新成功,最新日期: 20260109 +2026-01-17 23:11:43 - INFO - 找到 002931.SZ 在 20251217 至 20260117 期间的停牌数据: 9条 +2026-01-17 23:11:43 - INFO - 股票 002931.SZ 在 20260116 处于停牌状态 +2026-01-17 23:11:43 - INFO - 股票 002931.SZ 当前处于停牌状态 +2026-01-17 23:11:43 - INFO - 股票 002931.SZ 的最新行情日期 20260113 >= 停牌开始日期 20251218,数据完整,不输出报告 +2026-01-17 23:11:48 - INFO - 找到 300658.SZ 在 20251217 至 20260117 期间的停牌数据: 10条 +2026-01-17 23:11:48 - INFO - 股票 300658.SZ 在 20260116 处于停牌状态 +2026-01-17 23:11:48 - INFO - 股票 300658.SZ 当前处于停牌状态 +2026-01-17 23:11:48 - INFO - 股票 300658.SZ 的最新行情日期 20251231 < 停牌开始日期 20260105,开始更新数据 +2026-01-17 23:11:48 - INFO - 开始更新股票 300658.SZ 的行情数据 +2026-01-17 23:11:48 - INFO - 股票 300658.SZ 现有最新日期: 20251231,将获取 20260101 至今的数据 +2026-01-17 23:11:53 - INFO - 未获取到股票 300658.SZ 的新数据 +2026-01-17 23:11:54 - INFO - 股票 300658.SZ 数据更新成功,最新日期: 20251231 +2026-01-17 23:11:59 - INFO - 找到 601615.SH 在 20251217 至 20260117 期间的停牌数据: 4条 +2026-01-17 23:11:59 - INFO - 股票 601615.SH 在 20260116 处于停牌状态 +2026-01-17 23:11:59 - INFO - 股票 601615.SH 当前处于停牌状态 +2026-01-17 23:11:59 - INFO - 股票 601615.SH 的最新行情日期 20260112 < 停牌开始日期 20260113,开始更新数据 +2026-01-17 23:11:59 - INFO - 开始更新股票 601615.SH 的行情数据 +2026-01-17 23:11:59 - INFO - 股票 601615.SH 现有最新日期: 20260112,将获取 20260113 至今的数据 +2026-01-17 23:12:29 - ERROR - 读取文件 D:\gp_data\day\601615.SH_daily_data.txt 失败: HTTPConnectionPool(host='127.0.0.1', port=9674): Read timed out. (read timeout=30) +2026-01-17 23:12:29 - INFO - 获取股票 601615.SH 的全部行情数据 +2026-01-17 23:12:34 - INFO - 股票 601615.SH 的行情数据已成功获取并保存 +2026-01-17 23:12:34 - INFO - 股票 601615.SH 数据更新成功,最新日期: 20260112 +2026-01-17 23:12:34 - INFO - 停牌检查完成,剩余 5 个需要输出报告的不完整个股 +2026-01-17 23:12:34 - INFO - 检查完成,共检查 2592 个文件 +2026-01-17 23:12:34 - INFO - 发现 5 个未更新到最新的数据文件 +2026-01-17 23:12:34 - INFO - 检查结果已输出到:market_data_check_result.csv +2026-01-17 23:23:52 - INFO - 日志文件已配置: market_data_check.log +2026-01-17 23:23:52 - INFO - 开始检查行情数据完整性,检查日期:20260117 +2026-01-17 23:23:52 - INFO - 正在加载交易日历缓存... +2026-01-17 23:23:52 - INFO - 成功获取并缓存交易日历: 20240118至20260216 +2026-01-17 23:23:52 - INFO - 交易日历缓存成功,共 761 条记录 +2026-01-17 23:23:52 - WARNING - 检查日期 20260117 不是交易日,正在寻找最近的前一个交易日... +2026-01-17 23:23:52 - INFO - 目标日期 20260117 的前一个交易日是 20260116 +2026-01-17 23:23:52 - INFO - 已将检查日期调整为:20260116 +2026-01-17 23:23:52 - INFO - 开始检查 2592 个数据文件... +2026-01-17 23:23:52 - INFO - 收集到的不完整文件数量: 6 +2026-01-17 23:23:52 - INFO - 前5个不完整文件示例: ['000670.SZ', '002131.SZ', '002155.SZ', '002931.SZ', '300658.SZ'] +2026-01-17 23:23:52 - INFO - 开始对 6 个数据不完整的个股进行停牌检查 +2026-01-17 23:23:52 - INFO - 找到 000670.SZ 在 20251217 至 20260117 期间的停牌数据: 9条 +2026-01-17 23:23:52 - INFO - 股票 000670.SZ 在 20260116 处于停牌状态 +2026-01-17 23:23:52 - INFO - 股票 000670.SZ 当前处于停牌状态 +2026-01-17 23:23:52 - INFO - 股票 000670.SZ 的最新行情日期 20260105 < 停牌开始日期 20260106,开始更新数据 +2026-01-17 23:23:52 - INFO - 开始更新股票 000670.SZ 的行情数据 +2026-01-17 23:23:52 - INFO - 股票 000670.SZ 现有最新日期: 20260105,将获取 20260106 至今的数据 +2026-01-17 23:23:52 - INFO - 未获取到股票 000670.SZ 的新数据 +2026-01-17 23:23:52 - INFO - 股票 000670.SZ 数据更新成功,最新日期: 20260105 +2026-01-17 23:23:53 - INFO - 找到 002131.SZ 在 20251217 至 20260117 期间的停牌数据: 1条 +2026-01-17 23:23:53 - INFO - 股票 002131.SZ 在 20260116 处于停牌状态 +2026-01-17 23:23:53 - INFO - 股票 002131.SZ 当前处于停牌状态 +2026-01-17 23:23:53 - INFO - 股票 002131.SZ 的最新行情日期 20260115 < 停牌开始日期 20260116,开始更新数据 +2026-01-17 23:23:53 - INFO - 开始更新股票 002131.SZ 的行情数据 +2026-01-17 23:23:53 - INFO - 股票 002131.SZ 现有最新日期: 20260115,将获取 20260116 至今的数据 +2026-01-17 23:23:53 - INFO - 未获取到股票 002131.SZ 的新数据 +2026-01-17 23:23:53 - INFO - 股票 002131.SZ 数据更新成功,最新日期: 20260115 +2026-01-17 23:23:53 - INFO - 找到 002155.SZ 在 20251217 至 20260117 期间的停牌数据: 5条 +2026-01-17 23:23:53 - INFO - 股票 002155.SZ 在 20260116 处于停牌状态 +2026-01-17 23:23:53 - INFO - 股票 002155.SZ 当前处于停牌状态 +2026-01-17 23:23:53 - INFO - 股票 002155.SZ 的最新行情日期 20260109 < 停牌开始日期 20260112,开始更新数据 +2026-01-17 23:23:53 - INFO - 开始更新股票 002155.SZ 的行情数据 +2026-01-17 23:23:53 - INFO - 股票 002155.SZ 现有最新日期: 20260109,将获取 20260110 至今的数据 +2026-01-17 23:23:53 - INFO - 未获取到股票 002155.SZ 的新数据 +2026-01-17 23:23:53 - INFO - 股票 002155.SZ 数据更新成功,最新日期: 20260109 +2026-01-17 23:23:53 - INFO - 找到 002931.SZ 在 20251217 至 20260117 期间的停牌数据: 9条 +2026-01-17 23:23:53 - INFO - 股票 002931.SZ 在 20260116 处于停牌状态 +2026-01-17 23:23:53 - INFO - 股票 002931.SZ 当前处于停牌状态 +2026-01-17 23:23:53 - INFO - 股票 002931.SZ 的最新行情日期 20260113 >= 停牌开始日期 20251218,数据完整,不输出报告 +2026-01-17 23:23:53 - INFO - 找到 300658.SZ 在 20251217 至 20260117 期间的停牌数据: 10条 +2026-01-17 23:23:53 - INFO - 股票 300658.SZ 在 20260116 处于停牌状态 +2026-01-17 23:23:53 - INFO - 股票 300658.SZ 当前处于停牌状态 +2026-01-17 23:23:53 - INFO - 股票 300658.SZ 的最新行情日期 20251231 < 停牌开始日期 20260105,开始更新数据 +2026-01-17 23:23:53 - INFO - 开始更新股票 300658.SZ 的行情数据 +2026-01-17 23:23:53 - INFO - 股票 300658.SZ 现有最新日期: 20251231,将获取 20260101 至今的数据 +2026-01-17 23:23:53 - INFO - 未获取到股票 300658.SZ 的新数据 +2026-01-17 23:23:53 - INFO - 股票 300658.SZ 数据更新成功,最新日期: 20251231 +2026-01-17 23:23:53 - INFO - 找到 601615.SH 在 20251217 至 20260117 期间的停牌数据: 4条 +2026-01-17 23:23:53 - INFO - 股票 601615.SH 在 20260116 处于停牌状态 +2026-01-17 23:23:53 - INFO - 股票 601615.SH 当前处于停牌状态 +2026-01-17 23:23:53 - INFO - 股票 601615.SH 的最新行情日期 20260112 < 停牌开始日期 20260113,开始更新数据 +2026-01-17 23:23:53 - INFO - 开始更新股票 601615.SH 的行情数据 +2026-01-17 23:23:53 - INFO - 股票 601615.SH 现有最新日期: 20260112,将获取 20260113 至今的数据 +2026-01-17 23:23:53 - INFO - 未获取到股票 601615.SH 的新数据 +2026-01-17 23:23:53 - INFO - 股票 601615.SH 数据更新成功,最新日期: 20260112 +2026-01-17 23:23:53 - INFO - 停牌检查完成,剩余 5 个需要输出报告的不完整个股 +2026-01-17 23:23:53 - INFO - 检查完成,共检查 2592 个文件 +2026-01-17 23:23:53 - INFO - 发现 5 个未更新到最新的数据文件 +2026-01-17 23:23:53 - INFO - 检查结果已输出到:market_data_check_result.csv +2026-01-17 23:27:35 - INFO - 日志文件已配置: market_data_check.log +2026-01-17 23:27:35 - INFO - 开始检查行情数据完整性,检查日期:20260117 +2026-01-17 23:27:35 - INFO - 正在加载交易日历缓存... +2026-01-17 23:27:36 - INFO - 成功获取并缓存交易日历: 20240118至20260216 +2026-01-17 23:27:36 - INFO - 交易日历缓存成功,共 761 条记录 +2026-01-17 23:27:36 - WARNING - 检查日期 20260117 不是交易日,正在寻找最近的前一个交易日... +2026-01-17 23:27:36 - INFO - 目标日期 20260117 的前一个交易日是 20260116 +2026-01-17 23:27:36 - INFO - 已将检查日期调整为:20260116 +2026-01-17 23:27:36 - INFO - 开始检查 2592 个数据文件... +2026-01-17 23:27:36 - INFO - 收集到的不完整文件数量: 6 +2026-01-17 23:27:36 - INFO - 前5个不完整文件示例: ['000670.SZ', '002131.SZ', '002155.SZ', '002931.SZ', '300658.SZ'] +2026-01-17 23:27:36 - INFO - 开始对 6 个数据不完整的个股进行停牌检查 +2026-01-17 23:27:36 - INFO - 找到 000670.SZ 在 20251217 至 20260117 期间的停牌数据: 9条 +2026-01-17 23:27:36 - INFO - 股票 000670.SZ 在 20260116 处于停牌状态 +2026-01-17 23:27:36 - INFO - 股票 000670.SZ 当前处于停牌状态 +2026-01-17 23:27:36 - INFO - 股票 000670.SZ 的最新行情日期 20260105 < 停牌开始日期 20260106,开始更新数据 +2026-01-17 23:27:36 - INFO - 开始更新股票 000670.SZ 的行情数据 +2026-01-17 23:27:36 - INFO - 股票 000670.SZ 现有最新日期: 20260105,将获取 20260106 至今的数据 +2026-01-17 23:27:37 - INFO - 未获取到股票 000670.SZ 的新数据 +2026-01-17 23:27:37 - INFO - 股票 000670.SZ 数据更新成功,最新日期: 20260105 +2026-01-17 23:27:37 - INFO - 找到 002131.SZ 在 20251217 至 20260117 期间的停牌数据: 1条 +2026-01-17 23:27:37 - INFO - 股票 002131.SZ 在 20260116 处于停牌状态 +2026-01-17 23:27:37 - INFO - 股票 002131.SZ 当前处于停牌状态 +2026-01-17 23:27:37 - INFO - 股票 002131.SZ 的最新行情日期 20260115 < 停牌开始日期 20260116,开始更新数据 +2026-01-17 23:27:37 - INFO - 开始更新股票 002131.SZ 的行情数据 +2026-01-17 23:27:37 - INFO - 股票 002131.SZ 现有最新日期: 20260115,将获取 20260116 至今的数据 +2026-01-17 23:27:37 - INFO - 未获取到股票 002131.SZ 的新数据 +2026-01-17 23:27:37 - INFO - 股票 002131.SZ 数据更新成功,最新日期: 20260115 +2026-01-17 23:27:37 - INFO - 找到 002155.SZ 在 20251217 至 20260117 期间的停牌数据: 5条 +2026-01-17 23:27:37 - INFO - 股票 002155.SZ 在 20260116 处于停牌状态 +2026-01-17 23:27:37 - INFO - 股票 002155.SZ 当前处于停牌状态 +2026-01-17 23:27:37 - INFO - 股票 002155.SZ 的最新行情日期 20260109 < 停牌开始日期 20260112,开始更新数据 +2026-01-17 23:27:37 - INFO - 开始更新股票 002155.SZ 的行情数据 +2026-01-17 23:27:37 - INFO - 股票 002155.SZ 现有最新日期: 20260109,将获取 20260110 至今的数据 +2026-01-17 23:27:37 - INFO - 未获取到股票 002155.SZ 的新数据 +2026-01-17 23:27:37 - INFO - 股票 002155.SZ 数据更新成功,最新日期: 20260109 +2026-01-17 23:27:37 - INFO - 找到 002931.SZ 在 20251217 至 20260117 期间的停牌数据: 9条 +2026-01-17 23:27:37 - INFO - 股票 002931.SZ 在 20260116 处于停牌状态 +2026-01-17 23:27:37 - INFO - 股票 002931.SZ 当前处于停牌状态 +2026-01-17 23:27:37 - INFO - 股票 002931.SZ 的最新行情日期 20260113 >= 停牌开始日期 20251218,数据完整,不输出报告 +2026-01-17 23:27:37 - INFO - 找到 300658.SZ 在 20251217 至 20260117 期间的停牌数据: 10条 +2026-01-17 23:27:37 - INFO - 股票 300658.SZ 在 20260116 处于停牌状态 +2026-01-17 23:27:37 - INFO - 股票 300658.SZ 当前处于停牌状态 +2026-01-17 23:27:37 - INFO - 股票 300658.SZ 的最新行情日期 20251231 < 停牌开始日期 20260105,开始更新数据 +2026-01-17 23:27:37 - INFO - 开始更新股票 300658.SZ 的行情数据 +2026-01-17 23:27:37 - INFO - 股票 300658.SZ 现有最新日期: 20251231,将获取 20260101 至今的数据 +2026-01-17 23:27:37 - INFO - 未获取到股票 300658.SZ 的新数据 +2026-01-17 23:27:37 - INFO - 股票 300658.SZ 数据更新成功,最新日期: 20251231 +2026-01-17 23:27:37 - INFO - 找到 601615.SH 在 20251217 至 20260117 期间的停牌数据: 4条 +2026-01-17 23:27:37 - INFO - 股票 601615.SH 在 20260116 处于停牌状态 +2026-01-17 23:27:37 - INFO - 股票 601615.SH 当前处于停牌状态 +2026-01-17 23:27:37 - INFO - 股票 601615.SH 的最新行情日期 20260112 < 停牌开始日期 20260113,开始更新数据 +2026-01-17 23:27:37 - INFO - 开始更新股票 601615.SH 的行情数据 +2026-01-17 23:27:37 - INFO - 股票 601615.SH 现有最新日期: 20260112,将获取 20260113 至今的数据 +2026-01-17 23:27:38 - INFO - 未获取到股票 601615.SH 的新数据 +2026-01-17 23:27:38 - INFO - 股票 601615.SH 数据更新成功,最新日期: 20260112 +2026-01-17 23:27:38 - INFO - 停牌检查完成,剩余 5 个需要输出报告的不完整个股 +2026-01-17 23:28:37 - INFO - 日志文件已配置: market_data_check.log +2026-01-17 23:28:37 - INFO - 开始检查行情数据完整性,检查日期:20260117 +2026-01-17 23:28:37 - INFO - 正在加载交易日历缓存... +2026-01-17 23:28:37 - INFO - 成功获取并缓存交易日历: 20240118至20260216 +2026-01-17 23:28:37 - INFO - 交易日历缓存成功,共 761 条记录 +2026-01-17 23:28:37 - WARNING - 检查日期 20260117 不是交易日,正在寻找最近的前一个交易日... +2026-01-17 23:28:37 - INFO - 目标日期 20260117 的前一个交易日是 20260116 +2026-01-17 23:28:37 - INFO - 已将检查日期调整为:20260116 +2026-01-17 23:28:37 - INFO - 开始检查 2592 个数据文件... +2026-01-17 23:28:37 - INFO - 收集到的不完整文件数量: 6 +2026-01-17 23:28:37 - INFO - 前5个不完整文件示例: ['000670.SZ', '002131.SZ', '002155.SZ', '002931.SZ', '300658.SZ'] +2026-01-17 23:28:37 - INFO - 开始对 6 个数据不完整的个股进行停牌检查 +2026-01-17 23:28:37 - INFO - 找到 000670.SZ 在 20251217 至 20260117 期间的停牌数据: 9条 +2026-01-17 23:28:37 - INFO - 股票 000670.SZ 在 20260116 处于停牌状态 +2026-01-17 23:28:37 - INFO - 股票 000670.SZ 当前处于停牌状态 +2026-01-17 23:28:37 - INFO - 股票 000670.SZ 的最新行情日期 20260105 < 停牌开始日期 20260106,开始更新数据 +2026-01-17 23:28:37 - INFO - 开始更新股票 000670.SZ 的行情数据 +2026-01-17 23:28:37 - INFO - 股票 000670.SZ 现有最新日期: 20260105,将获取 20260106 至今的数据 +2026-01-17 23:28:38 - INFO - 未获取到股票 000670.SZ 的新数据 +2026-01-17 23:28:38 - INFO - 股票 000670.SZ 数据更新成功,最新日期: 20260105 +2026-01-17 23:28:38 - INFO - 找到 002131.SZ 在 20251217 至 20260117 期间的停牌数据: 1条 +2026-01-17 23:28:38 - INFO - 股票 002131.SZ 在 20260116 处于停牌状态 +2026-01-17 23:28:38 - INFO - 股票 002131.SZ 当前处于停牌状态 +2026-01-17 23:28:38 - INFO - 股票 002131.SZ 的最新行情日期 20260115 < 停牌开始日期 20260116,开始更新数据 +2026-01-17 23:28:38 - INFO - 开始更新股票 002131.SZ 的行情数据 +2026-01-17 23:28:38 - INFO - 股票 002131.SZ 现有最新日期: 20260115,将获取 20260116 至今的数据 +2026-01-17 23:28:38 - INFO - 未获取到股票 002131.SZ 的新数据 +2026-01-17 23:28:38 - INFO - 股票 002131.SZ 数据更新成功,最新日期: 20260115 +2026-01-17 23:28:38 - INFO - 找到 002155.SZ 在 20251217 至 20260117 期间的停牌数据: 5条 +2026-01-17 23:28:38 - INFO - 股票 002155.SZ 在 20260116 处于停牌状态 +2026-01-17 23:28:38 - INFO - 股票 002155.SZ 当前处于停牌状态 +2026-01-17 23:28:38 - INFO - 股票 002155.SZ 的最新行情日期 20260109 < 停牌开始日期 20260112,开始更新数据 +2026-01-17 23:28:38 - INFO - 开始更新股票 002155.SZ 的行情数据 +2026-01-17 23:28:38 - INFO - 股票 002155.SZ 现有最新日期: 20260109,将获取 20260110 至今的数据 +2026-01-17 23:28:38 - INFO - 未获取到股票 002155.SZ 的新数据 +2026-01-17 23:28:38 - INFO - 股票 002155.SZ 数据更新成功,最新日期: 20260109 +2026-01-17 23:28:38 - INFO - 找到 002931.SZ 在 20251217 至 20260117 期间的停牌数据: 9条 +2026-01-17 23:28:38 - INFO - 股票 002931.SZ 在 20260116 处于停牌状态 +2026-01-17 23:28:38 - INFO - 股票 002931.SZ 当前处于停牌状态 +2026-01-17 23:28:38 - INFO - 股票 002931.SZ 的最新行情日期 20260113 >= 停牌开始日期 20251218,数据完整,不输出报告 +2026-01-17 23:28:38 - INFO - 找到 300658.SZ 在 20251217 至 20260117 期间的停牌数据: 10条 +2026-01-17 23:28:38 - INFO - 股票 300658.SZ 在 20260116 处于停牌状态 +2026-01-17 23:28:38 - INFO - 股票 300658.SZ 当前处于停牌状态 +2026-01-17 23:28:38 - INFO - 股票 300658.SZ 的最新行情日期 20251231 < 停牌开始日期 20260105,开始更新数据 +2026-01-17 23:28:38 - INFO - 开始更新股票 300658.SZ 的行情数据 +2026-01-17 23:28:38 - INFO - 股票 300658.SZ 现有最新日期: 20251231,将获取 20260101 至今的数据 +2026-01-17 23:28:38 - INFO - 未获取到股票 300658.SZ 的新数据 +2026-01-17 23:28:38 - INFO - 股票 300658.SZ 数据更新成功,最新日期: 20251231 +2026-01-17 23:28:38 - INFO - 找到 601615.SH 在 20251217 至 20260117 期间的停牌数据: 4条 +2026-01-17 23:28:38 - INFO - 股票 601615.SH 在 20260116 处于停牌状态 +2026-01-17 23:28:38 - INFO - 股票 601615.SH 当前处于停牌状态 +2026-01-17 23:28:38 - INFO - 股票 601615.SH 的最新行情日期 20260112 < 停牌开始日期 20260113,开始更新数据 +2026-01-17 23:28:38 - INFO - 开始更新股票 601615.SH 的行情数据 +2026-01-17 23:28:38 - INFO - 股票 601615.SH 现有最新日期: 20260112,将获取 20260113 至今的数据 +2026-01-17 23:28:39 - INFO - 未获取到股票 601615.SH 的新数据 +2026-01-17 23:28:39 - INFO - 股票 601615.SH 数据更新成功,最新日期: 20260112 +2026-01-17 23:28:39 - INFO - 停牌检查完成,剩余 5 个需要输出报告的不完整个股 +2026-01-17 23:28:39 - INFO - 检查完成,共检查 2592 个文件 +2026-01-17 23:28:39 - INFO - 发现 5 个未更新到最新的数据文件 +2026-01-17 23:28:39 - INFO - 检查结果已输出到:market_data_check_result.csv diff --git a/update_tushare_totxt.py b/update_tushare_totxt.py index 7aee7b4..8bba13b 100644 --- a/update_tushare_totxt.py +++ b/update_tushare_totxt.py @@ -22,18 +22,38 @@ logger = setup_logger( console=True ) -# 定义日志函数 -def log_info(message): - logger.info(message) -def log_warning(message): - logger.warning(message) -def log_error(message): - logger.error(message) +def log_warning(message, **kwargs): + """警告信息,黄色显示""" + logger.warning(f"\033[33m{message}\033[0m", **kwargs) -def log_trigger(message): - logger.info(f"TRIGGER: {message}") +def log_failure(message, **kwargs): + """失败信息,红色显示""" + logger.error(f"\033[31m{message}\033[0m", **kwargs) + + + +# 定义带颜色的日志函数 +def log_success(message, **kwargs): + """成功信息,绿色显示""" + logger.info(f"\033[32m{message}\033[0m", **kwargs) + +def log_failure(message, **kwargs): + """失败信息,红色显示""" + logger.error(f"\033[31m{message}\033[0m", **kwargs) + +def log_process(message, **kwargs): + """处理中信息,黄色显示""" + logger.info(f"\033[33m{message}\033[0m", **kwargs) + +def log_result(message, **kwargs): + """结果信息,蓝色显示""" + logger.info(f"\033[34m{message}\033[0m", **kwargs) + +def log_message(message, **kwargs): + """普通信息,白色显示""" + logger.info(f"\033[37m{message}\033[0m", **kwargs) # 数据库相关导入 import pymysql from sqlalchemy import create_engine, text @@ -120,10 +140,10 @@ class AccountManager: return account except (ConnectionError, TimeoutError) as e: # 网络连接相关异常 - log_error(f"账户网络连接异常: {str(e)}") + log_failure(f"账户网络连接异常: {str(e)}") except Exception as e: # 其他异常 - log_error(f"获取账户异常: {str(e)}") + log_failure(f"获取账户异常: {str(e)}") # 无论什么异常,都尝试下一个账户 self.current_index = (self.current_index + 1) % len(self.accounts) @@ -132,7 +152,7 @@ class AccountManager: retry_count = getattr(self, '_retry_count', 0) if retry_count >= len(self.accounts) * 2: # 尝试每个账户2次 setattr(self, '_retry_count', 0) - log_error("所有账户都尝试失败,返回最后一个账户作为尝试") + log_failure("所有账户都尝试失败,返回最后一个账户作为尝试") return self.accounts[0] # 返回第一个账户作为最后的尝试 setattr(self, '_retry_count', retry_count + 1) @@ -165,9 +185,9 @@ class DataDownloader: } progress = current / total * 100 elapsed = time.time() - start_time - print(f"\r处理中: {progress:.1f}% ({current}/{total}) | 耗时: {elapsed:.1f}s", end='', flush=True) + log_process(f"\r处理中: {progress:.1f}% ({current}/{total}) | 耗时: {elapsed:.1f}s", end='', flush=True) if current == total: - print("\n数据处理完成!") # 添加换行符和完成信息 + log_success(f"\n数据处理完成!") # 添加换行符和完成信息 # def show_progress(self, current, total, start_time): # """更频繁的进度显示""" @@ -201,7 +221,7 @@ class DataDownloader: cursor.close() del self.conn_pool[conn_id] self.active_connections.add(conn_id) - log_info(f"复用数据库连接 {conn_id}") + log_message(f"复用数据库连接 {conn_id}") self.db_conn = conn return True except Exception: @@ -231,7 +251,7 @@ class DataDownloader: self.active_connections.remove(active_conn_id) # 添加到连接池 self.conn_pool[conn_id] = conn - log_info(f"连接已返回连接池: {conn_id}") + log_message(f"连接已返回连接池: {conn_id}") return True except Exception: # 连接已无效,关闭它 @@ -239,7 +259,7 @@ class DataDownloader: conn.close() if hasattr(self, 'conn_count'): self.conn_count = max(0, self.conn_count - 1) - log_info(f"无效连接已关闭,当前连接数: {self.conn_count}") + log_message(f"无效连接已关闭,当前连接数: {self.conn_count}") except: pass return False @@ -258,7 +278,7 @@ class DataDownloader: # 添加到连接池 self.conn_pool[conn_id] = self.db_conn self.db_conn = None # 清除对象属性 - log_info(f"默认连接已返回连接池: {conn_id}") + log_message(f"默认连接已返回连接池: {conn_id}") return True except Exception: # 连接已无效,关闭它 @@ -266,7 +286,7 @@ class DataDownloader: self.db_conn.close() self.db_conn = None self.conn_count = max(0, self.conn_count - 1) - log_info(f"默认无效连接已关闭,当前连接数: {self.conn_count}") + log_message(f"默认无效连接已关闭,当前连接数: {self.conn_count}") except: pass return False @@ -284,7 +304,7 @@ class DataDownloader: conn_id = f"conn_{int(time.time() * 1000)}" self.conn_count += 1 self.active_connections.add(conn_id) - log_info(f"创建数据库连接 {conn_id},当前连接数: {self.conn_count}") + log_message(f"创建数据库连接 {conn_id},当前连接数: {self.conn_count}") self.db_conn = conn return True # 静默返回,不记录成功日志 except pymysql.err.OperationalError as e: @@ -301,24 +321,24 @@ class DataDownloader: temp_conn.commit() temp_conn.close() - log_info(f"数据库 {Config.DB_CONFIG['database']} 创建成功") + log_message(f"数据库 {Config.DB_CONFIG['database']} 创建成功") # 重新尝试连接 continue except Exception as create_e: - log_error(f"创建数据库失败: {create_e}") + log_failure(f"创建数据库失败: {create_e}") return False elif attempt < Config.DB_MAX_RETRIES - 1: # 不是最后一次尝试 log_warning(f"数据库连接失败(尝试 {attempt + 1}/{Config.DB_MAX_RETRIES}): {e}") time.sleep(Config.DB_RETRY_INTERVAL) else: - log_error(f"数据库连接失败,已达到最大重试次数 {Config.DB_MAX_RETRIES}") + log_failure(f"数据库连接失败,已达到最大重试次数 {Config.DB_MAX_RETRIES}") return False except Exception as e: if attempt < Config.DB_MAX_RETRIES - 1: # 不是最后一次尝试 log_warning(f"数据库连接失败(尝试 {attempt + 1}/{Config.DB_MAX_RETRIES}): {e}") time.sleep(Config.DB_RETRY_INTERVAL) else: - log_error(f"数据库连接失败,已达到最大重试次数 {Config.DB_MAX_RETRIES}") + log_failure(f"数据库连接失败,已达到最大重试次数 {Config.DB_MAX_RETRIES}") return False def update_to_db(self, data: pd.DataFrame, table_name: str): @@ -350,7 +370,7 @@ class DataDownloader: # 添加表结构检查 if table_name.startswith('stock_'): if 'trade_date' not in data.columns: - log_error(f"数据缺少必要列 trade_date") + log_failure(f"数据缺少必要列 trade_date") return False if not pd.api.types.is_datetime64_any_dtype(data['trade_date']): data['trade_date'] = pd.to_datetime(data['trade_date'], format='%Y%m%d') @@ -359,30 +379,30 @@ class DataDownloader: data.to_sql(table_name, connection, if_exists='append', index=False, chunksize=1000) return True except Exception as e: - log_error(f"数据库更新失败: {e}") + log_failure(f"数据库更新失败: {e}") return False finally: # 确保资源释放 if engine: try: engine.dispose() - log_info(f"SQLAlchemy引擎已释放") + log_message(f"SQLAlchemy引擎已释放") except Exception as e: - log_error(f"释放SQLAlchemy引擎失败: {e}") + log_failure(f"释放SQLAlchemy引擎失败: {e}") def update_database(self, progress_queue=None, completion_label=None): try: - print("开始更新数据库...") + log_process("开始更新数据库...") start_time = time.time() # 1. 更新股票代码表(使用缓存机制) - print("正在更新股票代码表...") + log_process("正在更新股票代码表...") df_all = self.account_manager.get_stock_basic(force_primary=True) self.update_to_db(df_all, 'stock_basic') # 2. 从本地文件更新日线数据 - print("正在更新个股日线数据...") + log_process("正在更新个股日线数据...") files = [f for f in os.listdir(Config.OUTPUT_DIR) if f.endswith('_daily_data.txt')] self.total_files = len(files) self.processed_files = 0 @@ -391,7 +411,7 @@ class DataDownloader: # 使用批量插入优化数据库写入 self.batch_update_stock_data(files, start_time) else: - print("没有找到需要处理的个股数据文件") + log_message("没有找到需要处理的个股数据文件") # 初始显示进度0% # self.show_progress(0, self.total_files, start_time) @@ -410,7 +430,7 @@ class DataDownloader: # self.show_progress(i, self.total_files, start_time) # 3. 更新指数数据(从本地文件) - print("正在更新指数数据...") + log_process("正在更新指数数据...") index_file = os.path.join(Config.INDEX_DIR, '000001.SH.txt') if os.path.exists(index_file): df_index = self.read_from_txt(index_file) @@ -418,7 +438,7 @@ class DataDownloader: self.update_to_db(df_index, 'index_daily') # 4. 更新个股数据(分批处理) - print("正在更新实时个股数据...") + log_process("正在更新实时个股数据...") stock_codes = df_all['ts_code'].tolist() batch_size = 400 for i in range(0, len(stock_codes), batch_size): @@ -426,14 +446,14 @@ class DataDownloader: df = self.fetch_data_with_retry(pro.daily, ts_code=','.join(batch)) if df is not None: self.update_to_db(df, 'stock_daily') - print(f"数据库更新完成! 总耗时: {time.time() - start_time:.2f}秒") + log_success(f"数据库更新完成! 总耗时: {time.time() - start_time:.2f}秒") if completion_label: completion_label.config(text="数据库更新完成!", foreground="green") if progress_queue: progress_queue.put(1) return True except Exception as e: - log_error(f"数据库更新失败: {e}") + log_failure(f"数据库更新失败: {e}") if completion_label: completion_label.config(text="数据库更新失败!", foreground="red") return False @@ -489,15 +509,15 @@ class DataDownloader: self.show_progress(total_files, total_files, start_time) except Exception as e: - log_error(f"批量更新股票数据失败: {e}") + log_failure(f"批量更新股票数据失败: {e}") finally: # 确保资源释放 if engine: try: engine.dispose() - log_info(f"批量更新的SQLAlchemy引擎已释放") + log_message(f"批量更新的SQLAlchemy引擎已释放") except Exception as e: - log_error(f"释放批量更新的SQLAlchemy引擎失败: {e}") + log_failure(f"释放批量更新的SQLAlchemy引擎失败: {e}") def create_dirs(self): # 创建基础目录 @@ -543,7 +563,7 @@ class DataDownloader: # logging.info(f"数据已保存到 {filename}") return True except Exception as e: - log_error(f"保存文件时出错: {e}") + log_failure(f"保存文件时出错: {e}") return False def process_stock_code(self, code, progress_queue=None): # 修改参数默认值为None @@ -614,13 +634,13 @@ class DataDownloader: if progress_queue is not None: # 添加判断 progress_queue.put(1) except (ConnectionError, TimeoutError) as e: - log_error(f"股票 {code} 网络连接异常: {str(e)}") + log_failure(f"股票 {code} 网络连接异常: {str(e)}") except pd.errors.EmptyDataError: log_warning(f"股票 {code} 返回空数据") except (pymysql.err.OperationalError, pymysql.err.InterfaceError) as e: - log_error(f"股票 {code} 数据库操作异常: {str(e)}") + log_failure(f"股票 {code} 数据库操作异常: {str(e)}") except Exception as e: - log_error(f"处理股票代码 {code} 时出错: {str(e)}") + log_failure(f"处理股票代码 {code} 时出错: {str(e)}") finally: if progress_queue is not None: # 添加判断 progress_queue.put(1) @@ -642,7 +662,7 @@ class DataDownloader: progress_queue.put(1) return True except Exception as e: - log_error(f"Error fetching index data for {ts_code}: {e}") + log_failure(f"Error fetching index data for {ts_code}: {e}") if completion_label: completion_label.config(text="获取指数数据失败!", foreground="red") return False @@ -653,7 +673,7 @@ class DataDownloader: df_all = self.account_manager.get_stock_basic(force_primary=True) df_all[['ts_code', 'name']].to_csv(Config.INPUT_FILE, index=False, header=False, sep='\t') - log_info(f'所有资料已保存到 {Config.INPUT_FILE}') + log_success(f'所有资料已保存到 {Config.INPUT_FILE}') if completion_label: completion_label.config(text="代码表更新完成!", foreground="green") if progress_queue: @@ -662,6 +682,41 @@ class DataDownloader: logging.error(f'发生错误: {e}') if completion_label: completion_label.config(text="更新代码表失败!", foreground="red") + + def fetch_and_save_stock_basic_info(self): + """获取个股基础信息并保存到baseinfo目录""" + try: + log_process("开始获取个股基础信息...") + + # 获取Tushare API实例 + pro = self.account_manager.get_next_account(force_primary=True) # 强制使用主账户 + + # 获取股票基础信息 + df = pro.stock_basic( + exchange='', # 交易所代码,不指定则查询所有 + list_status='L', # 上市状态:L上市,D退市,P暂停上市 + fields='ts_code,symbol,name,area,industry,fullname,enname,market,exchange,curr_type,list_status,list_date,delist_date,is_hs' + ) + + if df is None or df.empty: + log_failure("未获取到个股基础信息") + return False + + # 创建baseinfo目录 + baseinfo_dir = os.path.join(Config.BASE_DIR, 'baseinfo') + os.makedirs(baseinfo_dir, exist_ok=True) + + # 保存数据到文件,使用TXT格式而不是CSV + output_file = os.path.join(baseinfo_dir, 'stock_basic_info.txt') + self.save_to_txt(df, output_file) + + log_success(f"个股基础信息已成功保存到: {output_file}") + log_result(f"共获取到 {len(df)} 条个股基础信息") + return True + except Exception as e: + log_failure(f"获取个股基础信息失败: {str(e)}") + log_failure(f"获取个股基础信息失败: {str(e)}") + return False def process_stock_codes_batch(self, codes: list): """批量处理股票代码(每次最多4000个)""" @@ -700,35 +755,35 @@ class DataDownloader: log_warning(f"数据库更新失败,但文件已保存: {code}") else: failed_count += 1 - log_error(f"文件保存失败: {code}") + log_failure(f"文件保存失败: {code}") else: log_warning(f"未获取到股票 {code} 的数据") failed_count += 1 except Exception as code_e: failed_count += 1 - log_error(f"处理股票 {code} 时出错: {str(code_e)}") + log_failure(f"处理股票 {code} 时出错: {str(code_e)}") else: failed_count += len(batch) log_warning(f"批次 {batch_idx//batch_size + 1}/{total_batches} 返回空数据") # 显示批次进度 - log_info(f"批次 {batch_idx//batch_size + 1}/{total_batches} 处理完成 | 成功: {processed_count} | 失败: {failed_count}") + log_result(f"批次 {batch_idx//batch_size + 1}/{total_batches} 处理完成 | 成功: {processed_count} | 失败: {failed_count}") except (ConnectionError, TimeoutError) as e: failed_count += len(batch) - log_error(f"批次 {batch_idx//batch_size + 1} 网络异常: {str(e)}") + log_failure(f"批次 {batch_idx//batch_size + 1} 网络异常: {str(e)}") # 更换账户后重试 pro = self.account_manager.get_next_account() except Exception as batch_e: failed_count += len(batch) - log_error(f"批次 {batch_idx//batch_size + 1} 处理异常: {str(batch_e)}") + log_failure(f"批次 {batch_idx//batch_size + 1} 处理异常: {str(batch_e)}") # 记录总体处理结果 - log_info(f"批量处理完成 | 总成功: {processed_count} | 总失败: {failed_count}") + log_result(f"批量处理完成 | 总成功: {processed_count} | 总失败: {failed_count}") return {'success': processed_count, 'failed': failed_count} except Exception as e: - log_error(f"批量处理主流程失败: {str(e)}") + log_failure(f"批量处理主流程失败: {str(e)}") return {'success': processed_count, 'failed': failed_count + (len(codes) - processed_count - failed_count)} finally: # 确保所有连接正确管理 @@ -737,9 +792,9 @@ class DataDownloader: if hasattr(self, 'db_conn') and self.db_conn: self.db_conn.close() self.db_conn = None - log_info("数据库连接已关闭") + log_message("数据库连接已关闭") except Exception as e: - log_error(f"关闭数据库连接时出错: {e}") + log_failure(f"关闭数据库连接时出错: {e}") def read_from_txt(self, file_path): """从TXT文件读取行情数据 - 内存优化版本""" @@ -759,7 +814,7 @@ class DataDownloader: else: return pd.DataFrame() except Exception as e: - log_error(f"读取文件 {file_path} 失败: {e}") + log_failure(f"读取文件 {file_path} 失败: {e}") return None # 添加新的方法用于优化数据库存储 @@ -784,18 +839,18 @@ class DataDownloader: WHERE s1.id > s2.id AND s1.trade_date = s2.trade_date AND s1.stock_code = s2.stock_code """)) - log_info("数据库存储优化完成") + log_message("数据库存储优化完成") return True except Exception as e: - log_error(f"数据库存储优化失败: {e}") + log_failure(f"数据库存储优化失败: {e}") return False finally: if engine: try: engine.dispose() - log_info(f"SQLAlchemy引擎已释放") + log_message(f"SQLAlchemy引擎已释放") except Exception as e: - log_error(f"释放SQLAlchemy引擎失败: {e}") + log_failure(f"释放SQLAlchemy引擎失败: {e}") class ConsoleDataDownloader: """控制台模式数据下载器""" @@ -807,10 +862,10 @@ class ConsoleDataDownloader: """使用指定的选项运行""" try: if choice == '0': - print("程序正在退出...") + log_message("程序正在退出...") sys.exit(0) if choice == '6': # 新增全部工作逻辑 - print("开始执行全部工作...") + log_process("开始执行全部工作...") start_time = time.time() # 1. 更新股票代码 @@ -824,15 +879,15 @@ class ConsoleDataDownloader: # 4. 同步数据库 if not self.downloader.connect_db(): - print("\033[31m数据库连接失败,跳过数据库同步\033[0m") + log_failure("数据库连接失败,跳过数据库同步") else: self.downloader.update_database() - print(f"全部工作完成! 总耗时: {time.time() - start_time:.2f}秒") + log_success(f"全部工作完成! 总耗时: {time.time() - start_time:.2f}秒") return # 检查数据库连接是否正常(仅当选择数据库相关操作时) if choice == '5' and not self.downloader.connect_db(): - print("\033[31m数据库连接失败,请检查配置后重试\033[0m") + log_failure("数据库连接失败,请检查配置后重试") return # 处理选项7:拷贝数据 @@ -844,6 +899,11 @@ class ConsoleDataDownloader: if choice == '8': self.check_data_integrity() return + + # 处理选项9:获取个股基础信息 + if choice == '9': + self.downloader.fetch_and_save_stock_basic_info() + return tasks = [] if choice in ('1', '4'): @@ -856,17 +916,17 @@ class ConsoleDataDownloader: tasks.append(self.downloader.update_database) if not tasks: - print("无效选项") + log_warning("无效选项") return - print("开始执行任务...") + log_process("开始执行任务...") start_time = time.time() for task in tasks: task() - print(f"任务完成! 总耗时: {time.time() - start_time:.2f}秒") + log_success(f"任务完成! 总耗时: {time.time() - start_time:.2f}秒") except Exception as e: - log_error(f"执行任务时发生异常: {e}") - print(f"\033[31m执行任务时发生异常: {e}\033[0m") + log_failure(f"执行任务时发生异常: {e}") + log_failure(f"执行任务时发生异常: {e}") def run(self): try: @@ -879,6 +939,7 @@ class ConsoleDataDownloader: print("6. 全部工作(下载+同步数据库)") # 新增选项 print("7. 拷贝更新后的数据到目标目录") # 新增选项 print("8. 检查数据完整性") # 新增选项 + print("9. 获取个股基础信息") # 新增选项 print("0. 退出") while True: @@ -889,10 +950,10 @@ class ConsoleDataDownloader: print("\n程序已中断") return except Exception as e: - log_error(f"用户交互过程中发生异常: {e}") - print(f"\033[31m操作异常: {e}\033[0m") + log_failure(f"用户交互过程中发生异常: {e}") + log_failure(f"操作异常: {e}") if choice == '6': # 新增全部工作逻辑 - print("开始执行全部工作...") + log_process("开始执行全部工作...") start_time = time.time() # 1. 更新股票代码 @@ -906,16 +967,16 @@ class ConsoleDataDownloader: # 4. 同步数据库 if not self.downloader.connect_db(): - print("\033[31m数据库连接失败,跳过数据库同步\033[0m") + log_failure("数据库连接失败,跳过数据库同步") else: self.downloader.update_database() - print(f"全部工作完成! 总耗时: {time.time() - start_time:.2f}秒") + log_success(f"全部工作完成! 总耗时: {time.time() - start_time:.2f}秒") continue # 检查数据库连接是否正常(仅当选择数据库相关操作时) # 检查数据库连接是否正常(仅当选择数据库相关操作时) if choice == '5' and not self.downloader.connect_db(): - print("\033[31m数据库连接失败,请检查配置后重试\033[0m") + log_failure("数据库连接失败,请检查配置后重试") continue # 处理选项7:拷贝数据 @@ -934,10 +995,10 @@ class ConsoleDataDownloader: tasks.append(self.downloader.update_database) if not tasks: - print("无效选项,请重新输入") + log_warning("无效选项,请重新输入") continue - print("开始执行任务...") + log_process("开始执行任务...") start_time = time.time() completed = 0 @@ -948,24 +1009,23 @@ class ConsoleDataDownloader: completed += 1 except (ConnectionError, TimeoutError) as e: failed += 1 - log_error(f"任务执行网络异常: {str(e)}") + log_failure(f"任务执行网络异常: {str(e)}") except Exception as e: failed += 1 - log_error(f"任务执行异常: {str(e)}") + log_failure(f"任务执行异常: {str(e)}") - print(f"任务完成! 成功: {completed}, 失败: {failed}, 总耗时: {time.time()-start_time:.2f}秒") + log_success(f"任务完成! 成功: {completed}, 失败: {failed}, 总耗时: {time.time()-start_time:.2f}秒") except (ConnectionError, TimeoutError) as e: - log_error(f"用户交互过程中发生网络异常: {str(e)}") - print(f"网络异常: {str(e)}") + log_failure(f"用户交互过程中发生网络异常: {str(e)}") + log_failure(f"网络异常: {str(e)}") except Exception as e: - log_error(f"用户交互过程中发生异常: {str(e)}") - print(f"操作异常: {str(e)}") + log_failure(f"用户交互过程中发生异常: {str(e)}") + log_failure(f"操作异常: {str(e)}") except KeyboardInterrupt: log_warning("用户中断程序") print("程序已中断") except Exception as e: - log_error(f"程序运行异常: {str(e)}") - print(f"程序运行异常: {str(e)}") + log_failure(f"程序运行异常: {str(e)}") def copy_data_to_target_directory(self): """拷贝D:\gp_data\day目录下的数据到D:\gp_data\floor_cl\data目录""" @@ -977,17 +1037,17 @@ class ConsoleDataDownloader: source_dir = os.path.join(Config.BASE_DIR, 'day') target_dir = 'D:\\data\\jq_hc\\data' - print(f"准备从 {source_dir} 拷贝数据到 {target_dir}") + log_process(f"准备从 {source_dir} 拷贝数据到 {target_dir}") try: # 确保目标目录存在 if not os.path.exists(target_dir): os.makedirs(target_dir, exist_ok=True) - print(f"已创建目标目录: {target_dir}") + log_message(f"已创建目标目录: {target_dir}") # 检查源目录是否存在 if not os.path.exists(source_dir): - print(f"\033[31m源目录 {source_dir} 不存在,请检查路径\033[0m") + log_failure(f"源目录 {source_dir} 不存在,请检查路径") return # 获取源目录中的txt文件列表 @@ -995,10 +1055,10 @@ class ConsoleDataDownloader: total_files = len(files) if total_files == 0: - print("\033[33m源目录中没有找到文件\033[0m") + log_warning("源目录中没有找到文件") return - print(f"开始拷贝 {total_files} 个文件...") + log_process(f"开始拷贝 {total_files} 个文件...") start_time = time.time() copied_count = 0 failed_count = 0 @@ -1015,21 +1075,21 @@ class ConsoleDataDownloader: # 显示进度 progress = (i / total_files) * 100 elapsed = time.time() - start_time - print(f"\r进度: [{('#' * int(progress / 2)):50}] {progress:.1f}% | {file_name}", end='', flush=True) + log_process(f"\r进度: [{('#' * int(progress / 2)):50}] {progress:.1f}% | {file_name}", end='', flush=True) except Exception as e: failed_count += 1 - print(f"\n\033[31m拷贝文件 {file_name} 失败: {str(e)}\033[0m") + log_failure(f"\n拷贝文件 {file_name} 失败: {str(e)}") # 打印完成信息 - print(f"\n拷贝完成!") - print(f"成功: {copied_count}, 失败: {failed_count}") - print(f"总耗时: {time.time() - start_time:.2f}秒") + log_success(f"\n拷贝完成!") + log_result(f"成功: {copied_count}, 失败: {failed_count}") + log_result(f"总耗时: {time.time() - start_time:.2f}秒") except KeyboardInterrupt: - print("\n\033[33m拷贝操作已被用户中断\033[0m") + log_warning("\n拷贝操作已被用户中断") except Exception as e: - print(f"\n\033[31m拷贝过程中发生异常: {str(e)}\033[0m") + log_failure(f"\n拷贝过程中发生异常: {str(e)}") def check_data_integrity(self): """检查数据完整性,运行check_market_data.py程序""" @@ -1037,7 +1097,7 @@ class ConsoleDataDownloader: import os try: - print("开始检查数据完整性...") + log_process("开始检查数据完整性...") # 构建check_market_data.py的完整路径 script_path = os.path.join(os.path.dirname(__file__), 'check_market_data.py') @@ -1051,14 +1111,14 @@ class ConsoleDataDownloader: ) if result.returncode == 0: - print(f"\n\033[32m数据完整性检查完成!\033[0m") + log_success(f"\n数据完整性检查完成!") else: - print(f"\n\033[31m数据完整性检查失败,返回码: {result.returncode}\033[0m") + log_failure(f"\n数据完整性检查失败,返回码: {result.returncode}") except FileNotFoundError: - print(f"\n\033[31m未找到check_market_data.py文件,请检查路径:\033[0m {script_path}") + log_failure(f"\n未找到check_market_data.py文件,请检查路径: {script_path}") except Exception as e: - print(f"\n\033[31m执行数据完整性检查时发生异常: {e}\033[0m") + log_failure(f"\n执行数据完整性检查时发生异常: {e}") def process_stock_codes(self): """处理所有股票代码 - 优化版本""" @@ -1066,7 +1126,7 @@ class ConsoleDataDownloader: with open(Config.INPUT_FILE, 'r', encoding='utf-8') as f: stock_codes = [line.strip().split('\t')[0] for line in f if line.strip()] except Exception as e: - log_error(f"读取股票代码文件失败: {e}") + log_failure(f"读取股票代码文件失败: {e}") return total = len(stock_codes) @@ -1077,7 +1137,7 @@ class ConsoleDataDownloader: progress = (completed / total) * 100 elapsed = time.time() - start_time # 单行进度显示 - print( + log_process( f"\r进度: [{'#' * int(progress / 2)}{' ' * (50 - int(progress / 2))}] {progress:.1f}% | 已完成: {completed}/{total} | 耗时: {elapsed:.1f}s", end='', flush=True) @@ -1098,8 +1158,8 @@ class ConsoleDataDownloader: print_progress() future.result() - print(f"\r进度: [{'#' * 50}] 100.0% | 已完成: {total}/{total} | 总耗时: {time.time() - start_time:.1f}s") - print(f"\n个股数据下载完成!") + log_success(f"\r进度: [{('#' * 50)}] 100.0% | 已完成: {total}/{total} | 总耗时: {time.time() - start_time:.1f}s") + log_success(f"\n个股数据下载完成!") # 创建全局AccountManager实例 _global_account_manager = AccountManager() @@ -1113,8 +1173,8 @@ def get_cached_data(code): def parse_args(): """解析命令行参数""" parser = argparse.ArgumentParser(description='Tushare数据更新工具') - parser.add_argument('-c', '--choice', type=str, choices=['0', '1', '2', '3', '4', '5', '6', '7', '8'], - help='要执行的操作: 0=退出, 1=更新股票代码表, 2=更新指数数据, 3=更新个股数据, 4=全部更新, 5=同步数据库, 6=全部工作, 7=拷贝数据到目标目录, 8=检查数据完整性') + parser.add_argument('-c', '--choice', type=str, choices=['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], + help='要执行的操作: 0=退出, 1=更新股票代码表, 2=更新指数数据, 3=更新个股数据, 4=全部更新, 5=同步数据库, 6=全部工作, 7=拷贝数据到目标目录, 8=检查数据完整性, 9=获取个股基础信息') return parser.parse_args() if __name__ == "__main__":