Files
20250920-e194e889/view_analysis.py
2026-04-25 19:21:28 +08:00

183 lines
6.5 KiB
Python

#!/usr/bin/env python3
"""
查看分析历史工具
"""
import os
import sys
import json
from datetime import datetime
from analysis_storage import AnalysisStorage
def print_banner():
"""打印横幅"""
banner = """
╔══════════════════════════════════════════════════════════════╗
║ 分析历史查看工具 ║
║ Analysis History Viewer ║
╚══════════════════════════════════════════════════════════════╝
"""
print(banner)
def list_all_analyses():
"""列出所有分析记录"""
storage = AnalysisStorage()
analyses = storage.list_all_analyses()
if not analyses:
print("📭 暂无分析记录")
return
print(f"📊 共找到 {len(analyses)} 条分析记录:")
print("=" * 80)
for i, analysis in enumerate(analyses, 1):
print(f"{i:2d}. {analysis['symbol']} - {analysis['company_name']}")
print(f" 时间: {analysis['analysis_date']}")
print(f" 建议: {analysis['recommendation']}")
print(f" 评分: {analysis['overall_score']:.1f}/100")
print(f" 文件: {analysis['files']['summary']}")
print("-" * 80)
def view_analysis_details(symbol: str):
"""查看特定股票的分析详情"""
storage = AnalysisStorage()
analysis_data = storage.get_latest_analysis(symbol)
if not analysis_data:
print(f"❌ 未找到 {symbol} 的分析记录")
return
print(f"\n📈 {symbol} 最新分析结果:")
print("=" * 60)
# 基本信息
metadata = analysis_data.get('analysis_metadata', {})
company_info = analysis_data.get('company_info', {})
investment_rec = analysis_data.get('investment_recommendation', {})
print(f"公司名称: {company_info.get('name', 'N/A')}")
print(f"分析时间: {metadata.get('analysis_date', 'N/A')}")
print(f"投资建议: {investment_rec.get('recommendation', 'N/A')}")
print(f"综合评分: {investment_rec.get('overall_score', 0):.1f}/100")
# 各维度评分
valuation = analysis_data.get('valuation_analysis', {})
financial_health = analysis_data.get('financial_health', {})
growth = analysis_data.get('growth_analysis', {})
risk = analysis_data.get('risk_analysis', {})
print(f"\n📊 各维度评分:")
print(f" 估值吸引力: {valuation.get('valuation_score', 0):.1f}/100")
print(f" 财务健康度: {financial_health.get('health_score', 0):.1f}/100")
print(f" 成长性: {growth.get('growth_score', 0):.1f}/100")
print(f" 风险控制: {risk.get('risk_score', 0):.1f}/100")
# 关键优势
strengths = investment_rec.get('key_strengths', [])
if strengths:
print(f"\n✅ 关键优势:")
for strength in strengths:
print(f"{strength}")
# 关键担忧
concerns = investment_rec.get('key_concerns', [])
if concerns:
print(f"\n⚠️ 关键担忧:")
for concern in concerns:
print(f"{concern}")
# 风险提示
warnings = investment_rec.get('risk_warnings', [])
if warnings:
print(f"\n🚨 风险提示:")
for warning in warnings:
print(f"{warning}")
def view_analysis_history(symbol: str):
"""查看特定股票的分析历史"""
storage = AnalysisStorage()
history = storage.get_analysis_history(symbol)
if not history:
print(f"❌ 未找到 {symbol} 的分析历史")
return
print(f"\n📚 {symbol} 分析历史 (共 {len(history)} 条记录):")
print("=" * 80)
for i, record in enumerate(history, 1):
print(f"{i:2d}. 时间: {record['analysis_date']}")
print(f" 建议: {record['recommendation']}")
print(f" 评分: {record['overall_score']:.1f}/100")
print(f" 文件: {record['files']['summary']}")
print("-" * 80)
def export_analysis_summary():
"""导出分析摘要"""
storage = AnalysisStorage()
analyses = storage.list_all_analyses()
if not analyses:
print("📭 暂无分析记录可导出")
return
# 生成摘要报告
summary_file = f"analysis_summary_{datetime.now().strftime('%Y%m%d_%H%M%S')}.md"
with open(summary_file, 'w', encoding='utf-8') as f:
f.write("# 股票分析摘要报告\n\n")
f.write(f"生成时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
f.write(f"分析记录数: {len(analyses)}\n\n")
f.write("## 分析记录列表\n\n")
for i, analysis in enumerate(analyses, 1):
f.write(f"### {i}. {analysis['symbol']} - {analysis['company_name']}\n")
f.write(f"- **分析时间**: {analysis['analysis_date']}\n")
f.write(f"- **投资建议**: {analysis['recommendation']}\n")
f.write(f"- **综合评分**: {analysis['overall_score']:.1f}/100\n")
f.write(f"- **详细报告**: {analysis['files']['summary']}\n\n")
print(f"✅ 分析摘要已导出到: {summary_file}")
def main():
"""主函数"""
if len(sys.argv) < 2:
print("使用方法:")
print("python3 view_analysis.py list # 列出所有分析记录")
print("python3 view_analysis.py view <股票代码> # 查看最新分析结果")
print("python3 view_analysis.py history <股票代码> # 查看分析历史")
print("python3 view_analysis.py export # 导出分析摘要")
return
command = sys.argv[1].lower()
if command == 'list':
print_banner()
list_all_analyses()
elif command == 'view':
if len(sys.argv) < 3:
print("❌ 请提供股票代码")
return
symbol = sys.argv[2].upper()
print_banner()
view_analysis_details(symbol)
elif command == 'history':
if len(sys.argv) < 3:
print("❌ 请提供股票代码")
return
symbol = sys.argv[2].upper()
print_banner()
view_analysis_history(symbol)
elif command == 'export':
print_banner()
export_analysis_summary()
else:
print("❌ 无效命令")
if __name__ == "__main__":
main()