feat: update update excel file script with custom sort

main
jackluson 2 years ago
parent 1b3e174db7
commit 1727cafae0

@ -11,11 +11,12 @@ Copyright (c) 2020 Camel Lu
'''
import re
import decimal
from functools import cmp_to_key
from pprint import pprint
import pandas as pd
import numpy as np
from fund_info.statistic import FundStatistic
from utils.index import get_last_quarter_str, get_stock_market, find_from_list_of_dict, update_xlsx_file
from utils.index import get_last_quarter_str, get_stock_market, find_from_list_of_dict, update_xlsx_file, update_xlsx_file_with_sorted
from utils.file_op import read_dir_all_file
@ -399,11 +400,25 @@ def get_special_fund_code_holder_stock_detail(each_statistic=None, quarter_index
update_xlsx_file(path, df_a_list, sheet_name='十大持仓明细--' + quarter_index)
def compare(item1, item2):
year1 = int(item1[0:4])
quarter_index1 = int(item1[6:7])
year2 = int(item2[0:4])
quarter_index2 = int(item2[6:7])
if year2 < year1 or (year2 == year1 and quarter_index2 < quarter_index1):
return -1
elif year2 > year1 or (year2 == year1 and quarter_index2 > quarter_index1):
return 1
else:
return 0
# Calling
# list.sort(key=compare)
def calculate_quarter_fund_count():
stock_markets = ['A股/上证主板', 'A股/创业板', 'A股/科创板', 'A股/深证主板', 'A股/北交所', '港股', '其他']
for market in stock_markets:
dir_path = './outcome/数据整理/stocks/' + market + '/'
# dir_path = './outcome/数据整理/stocks/' + 'A股/北交所' + '/'
files = read_dir_all_file(dir_path)
print(market, "files", len(files))
for file_path in files:
@ -411,9 +426,15 @@ def calculate_quarter_fund_count():
xls = pd.ExcelFile(path, engine='openpyxl')
quarter_list = []
sum_column_name = '总计'
for sheet_name in reversed(xls.sheet_names):
if sheet_name == '总计':
sheet_names = []
for sheet_name in xls.sheet_names:
if sheet_name == sum_column_name:
continue
sheet_names.append(sheet_name)
sheet_names.sort(key=cmp_to_key(compare))
for sheet_name in sheet_names:
# if sheet_name == '总计':
# continue
item_quarter_data = [sheet_name]
df_cur_sheet = xls.parse(sheet_name)
item_quarter_data.append(len(df_cur_sheet))
@ -422,7 +443,7 @@ def calculate_quarter_fund_count():
quarter_list.append(item_quarter_data)
columns = ["日期", "持有数量(只)", '持有市值(亿元)']
df_quarter_list = pd.DataFrame(quarter_list, columns=columns)
update_xlsx_file(path, df_quarter_list, sum_column_name)
update_xlsx_file_with_sorted(path, df_quarter_list, sum_column_name, sheet_names)
if __name__ == '__main__':
@ -436,7 +457,7 @@ if __name__ == '__main__':
# t100_stocks_rank(each_statistic=each_statistic)
# 获取某些基金的十大持仓股票信息
get_special_fund_code_holder_stock_detail()
# get_special_fund_code_holder_stock_detail()
# calculate_quarter_fund_count()
select_condition_stocks_rank()
calculate_quarter_fund_count()
# select_condition_stocks_rank()

@ -197,7 +197,7 @@ def get_stock_market(stock_code):
return '其他'
def update_xlsx_file(path, df_data, sheet_name):
def update_xlsx_file(path, df_data, sheet_name, sorted_worksheets = []):
try:
if os.path.exists(path):
writer = pd.ExcelWriter(path, engine='openpyxl')
@ -213,14 +213,41 @@ def update_xlsx_file(path, df_data, sheet_name):
writer.book = book
df_data.to_excel(
writer, sheet_name=sheet_name)
writer.save()
writer.close()
else:
df_data.to_excel(
path, sheet_name=sheet_name)
except:
except BaseException:
print("path", path)
raise BaseException('更新excel失败')
def update_xlsx_file_with_sorted(path, df_data, sheet_name, sorted_sheetnames = []):
try:
if os.path.exists(path):
writer = pd.ExcelWriter(path, engine='openpyxl')
workbook = load_workbook(path)
writer.book = workbook
writer.sheets = {ws.title:ws for ws in workbook.worksheets}
for sheet_item in sorted_sheetnames:
del workbook[sheet_item]
df_data.to_excel(
writer, sheet_name=sheet_name)
workbook = writer.book
for worksheet in sorted_sheetnames:
workbook._add_sheet(writer.sheets.get(worksheet))
writer.book = workbook
writer.save()
writer.close()
else:
df_data.to_excel(
path, sheet_name=sheet_name)
except BaseException:
print("path", path)
raise BaseException('更新excel失败')
def bootstrap_thread(target_fn, total, thread_count=2):

Loading…
Cancel
Save