1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
| date_mapping_1 = { "03-31": "季度报告:", "06-30": "半年度报告:", "09-30": "季度报告:", "12-31": "年度报告:" } date_mapping_2 = { "03-31": "Q1", "06-30": "H1", "09-30": "前三季度", "12-31": "年" } def get_summary(): period = period_entry.get() code_list = code_list_entry.get().split(',') try: results = [] title = date_mapping_1.get(period[5:], "未知") if title == "未知": messagebox.showerror("报告期错误") return quarter = date_mapping_2.get(period[5:], "未知") year = period[:4] int_year = int(year) - 1 last_year = str(int_year).zfill(4) yoy_period = period.replace(year, last_year, 1) period_desc = f"{title}公司{year}{quarter}" for code in code_list: try: company = ak.stock_individual_info_em(symbol=code) name = company.iloc[5][1] except KeyError: results.append(f"{code}:无法匹配\n") continue try: data = ak.stock_financial_abstract_ths(symbol=code, indicator="按报告期") data = data.set_index(data.columns[0]) except KeyError: results.append(f"{code}:{name}获取财报数据失败\n") continue try: revenue = remove_unit(data.loc[period, "营业总收入"]) revenue_change = str2percentage(data.loc[period, "营业总收入同比增长率"]) profit = remove_unit(data.loc[period, "净利润"]) profit_change = str2percentage(data.loc[period, "净利润同比增长率"]) pre_profit = remove_unit(data.loc[yoy_period, "净利润"]) except KeyError: results.append(f"{code}:{name}报告未更新\n") continue summary = generate_summary(name, period_desc, revenue, revenue_change, profit, profit_change, pre_profit) results.append(f"{summary}\n") result_text.config(state='normal') result_text.delete('1.0', tk.END) result_text.insert(tk.END, "\n".join(results)) result_text.config(state='disabled') except Exception as e: messagebox.showerror("Error", f"获取摘要时出错:{str(e)}")
root = tk.Tk() root.title("日报-财务报告摘要akshare")
period_label = tk.Label(root, text="请输入报告期(如2023-06-30)") period_label.pack() period_entry = tk.Entry(root) period_entry.pack() code_list_label = tk.Label(root, text="请输入公司code(多个则以英文逗号分隔)") code_list_label.pack() code_list_entry = tk.Entry(root, width=100) code_list_entry.pack()
run_button = tk.Button(root, text="运行", command=get_summary) run_button.pack()
result_text = tk.Text(root, height=30, width=120, state='disabled') result_text.pack()
root.mainloop()
|