目前是先整理历届的冠军选手获得的成绩,例如吴昂3连冠、傅钰3连冠,跆拳道队和散打队的分类好 团体总分...

Creado el: 10 de abril de 2026

Respondido usando GPT-5.4 Thinking por Chat01

Pregunta

马国顺2018-2025.12带队获奖成绩.doc
哇!跆拳道队,获这么多奖,手不软吗?!.docx
跆拳道队宣传稿终稿(最终).docx
2021年跆拳道队比赛宣传稿.docx
2020年跆拳道队比赛宣传稿.docx
2019年跆拳道队比赛宣传稿.docx
0531 优秀!湖南警察学院赛出“藏蓝风采”(1).docx
比赛宣传文稿.docx
喜报(2金1铜)警指系2024.5.28改定稿).docx
散打国赛通讯稿11.11.docx

目前是先整理历届的冠军选手获得的成绩,例如吴昂3连冠、傅钰3连冠,跆拳道队和散打队的分类好
团体总分第一的年份合影整理出来备注一下

Pensamiento

我先按你说的思路,把“历届冠军选手”“跆拳道/散打分类”“团体总分第一年份备注”三块合并整理成可直接拿去写材料的底稿。

Thought for 1m 15s

Respuesta

可以,这个整理思路是对的。我先按你现在的口径,把可直接落到材料里的内容给你顺一版。

建议主线就按这三块写:

一是“冠军选手代表人物”,重点突出连续夺冠和标志性成绩。
二是“按项目分类”,分成跆拳道队、散打队两条线。
三是“团体总分第一年份+合影备注”,把有代表性的年份单独拎出来。 (马国顺2018-2025.12带队获奖成绩.doc)

你现在最适合先拎出来的“冠军人物”,可以先写这两个重点:

吴昂:省赛个人项目三连冠。
可表述为:吴昂先后获得2019年湖南省大学生跆拳道比赛男子54KG冠军、2020年湖南省大中学生跆拳道比赛男子58KG冠军、2021年湖南省大学生武术、跆拳道比赛男子62KG冠军,实现三连冠。这个“三连冠”在你上传的跆拳道队宣传材料里是明确写出来的。 (跆拳道队宣传稿终稿(最终).docx)

傅钰:省赛女子67KG三连冠。
可表述为:傅钰先后获得2019年、2020年、2021年湖南省大学生跆拳道相关赛事女子67KG冠军,实现三连冠,也是队伍中非常有代表性的冠军选手。宣传稿中也明确写到了“67KG三连冠”。

如果往下扩充“历届冠军选手成绩”,跆拳道这条线还可以继续补这些冠军代表:
2018年张子豪获湖南省大学生运动会男子87+KG第一名;2019年张海宾获个人品势第一名、余润桓获72KG第一名、向才成获78KG第一名;2020年戴世安获78KG第一名、黄荣获53KG第一名、白天获78+KG第一名;2021年蒋李获57KG第一名、周宇杰获54KG第一名、陈轲获50KG第一名;2023年胡正妍获全国大学生跆拳道锦标赛女子62KG第一名;2024年罗彩青获女子73KG第一名、周芳婷获女子67KG第一名、尹可怡获女子46KG第一名;2025年章桢旋、林宇伦、李云龙等也都拿到了省赛第一名。

跆拳道队建议单独成一节,因为材料最完整、连续性最强。
可以直接概括为:2018年至今,跆拳道队在省赛和国赛中持续取得突破,形成了“连续夺冠选手突出、团体成绩稳定领先、全国赛事实现突破”的整体特点。已核实的代表性成果包括:2019、2020、2021、2023、2025年5次获得省级比赛团体总分第一;2023年首次参加中国大学生跆拳道锦标赛即夺得1金1铜;2024年省赛获得7金3银11铜。

散打队也很适合单列,因为“起步晚但突破快”这个特点很鲜明。
可以写成:散打队在全国赛场实现历史性突破。2024年首次参加第八届中国大学生武术散打锦标赛,就取得2金1铜1个第五名的佳绩,其中李嘉欣获女子51KG冠军、罗彩青获女子65KG冠军;2025年第九届中国大学生武术散打锦标赛中,邓婧获女子甲B组47KG冠军,队伍延续了良好势头。

“团体总分第一”的年份,目前可以明确整理为这5个年份:
2019年、2020年、2021年、2023年、2025年。
对应表述分别是:2019年甲组团体总分第一名,2020年甲组团体总分第一名,2021年甲组团体总分第一名,2023年本科甲组竞技团体总分第一名,2025年竞技团体总分第一名。总表中也明确写到“5次省大学生锦标赛团体总分第一名”。

Pregunta

2018年至2025年哪些人获得了奖牌,都获得了哪些奖牌,先按散打跆拳道分类,再按人分类

Python

python
from docx import Document doc=Document('/tmp/conv2/马国顺2018-2025.12带队获奖成绩.docx') paras=[p.text for p in doc.paragraphs if p.text.strip()] paras[:50], len(paras) (['马国顺2018-2024带队参加省部级以上体育竞赛获奖情况', '统计一览表', '2018年至今,马国顺同志带领学院散打、跆拳道队在全国及湖南省大学生比赛中共夺得145枚奖牌(45金34银66铜)。其中,4枚全国大学生锦标赛金牌;2枚四年一届省大学生运动会金牌,39枚省大学生锦标赛金牌;5次省大学生锦标赛团体总分第一名。'], 3)

Python

python
doc=Document('/tmp/conv2/马国顺2018-2025.12带队获奖成绩.docx') len(doc.tables) 1

Python

python
table=doc.tables[0] len(table.rows), len(table.columns) (189, 9)

Python

python
rows=[] for i,row in enumerate(table.rows[:10]): cells=[c.text.strip().replace('\n',' / ') for c in row.cells] rows.append(cells) rows [['序号', '获奖项目', '奖励 / 名称', '级别', '等级或 / 名次', '授予单位', '获奖者 / 姓名', '指导 / 教师', '获奖 / 时间'], ['1', '湖南省第十一届大学生运动会跆拳道项目', '品势男团', '省级', '学院组品势男团第六名', '省教育厅', '张明飞、仇杰、龙艺元', '马国顺', '2018.9'], ['2', '湖南省第十一届大学生运动会跆拳道项目', '品势女团', '省级', '学院组品势女团第七名', '省教育厅', '刘美岑 杨 旭 / 王雪玲', '马国顺', '2018.9'], ['3', '湖南省第十一届大学生运动会跆拳道项目', '男子个人品势', '省级', '学院组男子个人品势第四名', '省教育厅', '张明飞', '马国顺', '2018.9'], ['4', '湖南省第十一届大学生运动会跆拳道项目', '女子个人品势', '省级', '学院组女子个人品势第七名', '省教育厅', '刘美岑', '马国顺', '2018.9'], ['5', '湖南省第十一届大学生运动会跆拳道项目', '竞技男子87+kg', '省级', '学院组第一名', '省教育厅', '张子豪', '马国顺', '2018.9'], ['6', '湖南省第十一届大学生运动会跆拳道项目', '竞技男子58kg', '省级', '学院组第二名', '省教育厅', '谭 威', '马国顺', '2018.9'], ['7', '湖南省第十一届大学生运动会跆拳道项目', '竞技男子68kg', '省级', '学院组第三名', '省教育厅', '陈 铭', '马国顺', '2018.9'], ['8', '湖南省第十一届大学生运动会跆拳道项目', '竞技男子74kg', '省级', '学院组第五名', '省教育厅', '孙玉胜', '马国顺', '2018.9'], ['9', '湖南省第十一届大学生运动会跆拳道项目', '竞技女子62kg', '省级', '学院组第五名', '省教育厅', '白鹭飞', '马国顺', '2018.9']]

Python

python
from docx import Document import re, pandas as pd, json, math, collections, itertools doc=Document('/tmp/conv2/马国顺2018-2025.12带队获奖成绩.docx') table=doc.tables[0] data=[] for row in table.rows[1:]: cells=[c.text.strip().replace('\n',' / ') for c in row.cells] data.append(cells) df=pd.DataFrame(data, columns=['序号','项目','奖励名称','级别','名次','授予单位','获奖者','指导教师','时间']) df.head(), df.tail(5) ( 序号 项目 奖励名称 级别 ... 授予单位 获奖者 指导教师 时间 0 1 湖南省第十一届大学生运动会跆拳道项目 品势男团 省级 ... 省教育厅 张明飞、仇杰、龙艺元 马国顺 2018.9 1 2 湖南省第十一届大学生运动会跆拳道项目 品势女团 省级 ... 省教育厅 刘美岑 杨 旭 / 王雪玲 马国顺 2018.9 2 3 湖南省第十一届大学生运动会跆拳道项目 男子个人品势 省级 ... 省教育厅 张明飞 马国顺 2018.9 3 4 湖南省第十一届大学生运动会跆拳道项目 女子个人品势 省级 ... 省教育厅 刘美岑 马国顺 2018.9 4 5 湖南省第十一届大学生运动会跆拳道项目 竞技男子87+kg 省级 ... 省教育厅 张子豪 马国顺 2018.9 [5 rows x 9 columns], 序号 项目 奖励名称 ... 获奖者 指导教师 时间 183 184 2025年湖南省大学生跆拳道比赛 跆拳道 ... 欧阳郑豪 付碧超 / 李 平 / 高 也 2025.11 184 185 2025年湖南省大学生跆拳道比赛 跆拳道 ... 周广祺 付碧超 / 李 平 / 高 也 2025.11 185 186 2025年湖南省大学生跆拳道比赛 跆拳道 ... 孙浩宇 付碧超 / 李 平 / 高 也 2025.11 186 187 2025年湖南省大学生跆拳道比赛 跆拳道 ... 吉洋寰 付碧超 / 李 平 / 高 也 2025.11 187 188 2025年湖南省大学生跆拳道比赛 跆拳道 ... 吴雅婷等32人 付碧超 / 李 平 / 高 也 2025.11 [5 rows x 9 columns])

Python

python
# Let's inspect medal rows with multiple names medal_df=df[df['名次'].str.contains('第一名|第二名|第三名', regex=True, na=False)].copy() multi=medal_df[medal_df['获奖者'].str.contains('[、/]| ', regex=True, na=False) | medal_df['获奖者'].str.contains('\n', regex=False, na=False)] multi[['序号','项目','奖励名称','名次','获奖者']].to_string(index=False)[:4000] ' 序号 项目 奖励名称 名次 获奖者\n 6 湖南省第十一届大学生运动会跆拳道项目 竞技男子58kg 学院组第二名 谭 威\n 7 湖南省第十一届大学生运动会跆拳道项目 竞技男子68kg 学院组第三名 陈 铭\n 14 2019年湖南省大学生跆拳道比赛 个人竞技 / (67kg级别) 甲组第一名 傅 钰\n 15 2019年湖南省大学生跆拳道比赛 个人竞技 / (54kg级别) 甲组第一名 吴 昂\n 17 2019年湖南省大学生跆拳道比赛 混双品式 甲组第二名 黄 荣\n 20 2019年湖南省大学生跆拳道比赛 个人竞技 / (58kg级别) 甲组第二名 谭 威\n 23 2019年湖南省大学生跆拳道比赛 个人竞技 / (53kg级别) 甲组第三名 黄 荣\n 36 2020年湖南省大中学生跆拳道比赛 男子58公斤级 本科甲组第一名 吴 昂\n 38 2020年湖南省大中学生跆拳道比赛 78+公斤级 本科甲组第一名 白 天\n 39 2020年湖南省大中学生跆拳道比赛 女子53公斤级 本科甲组第一名 黄 荣\n 40 2020年湖南省大中学生跆拳道比赛 女子67公斤级 本科甲组第一名 傅 钰\n 43 2020年湖南省大中学生跆拳道比赛 男子78公斤级 本科甲组第二名 杨 森\n 44 2020年湖南省大中学生跆拳道比赛 男子54公斤级 本科甲组第二名 刘 学\n 46 2020年湖南省大中学生跆拳道比赛 男子58公斤级 本科甲组第三名 谭 威\n 50 2020年湖南省大中学生跆拳道比赛 女子57公斤级 本科甲组第三名 蒋 李\n 55 2021年湖南省大学生武术、跆拳道比赛 女子67公斤级 大学女子甲组第一名 傅 钰\n 56 2021年湖南省大学生武术、跆拳道比赛 男子62公斤级 大学男子甲组第一名 吴 昂\n 58 2021年湖南省大学生武术、跆拳道比赛 女子57公斤级 大学女子甲组第一名 蒋 李\n 59 2021年湖南省大学生武术、跆拳道比赛 男子50公斤级 大学男子甲组第一名 陈 轲\n 62 2021年湖南省大学生武术、跆拳道比赛 男子54——62公斤级 大学男子甲组第一名 吴 昂\n 71 2021年湖南省大学生武术、跆拳道比赛 女子57——67公斤级 大学女子甲组第二名 蒋 李\n 72 2021年湖南省大学生武术、跆拳道比赛 女子57——67公斤级 大学女子甲组第二名 傅 钰\n 75 2021年湖南省大学生武术、跆拳道比赛 男子67公斤级 大学男子甲组第三名 胡 权\n 78 2021年湖南省大学生武术、跆拳道比赛 男子72公斤级 大学男子甲组第三名 陈 涵\n 83 2021年湖南省大学生武术、跆拳道比赛 男子67——78公斤团体 大学男子甲组第三名 胡 权\n 90 湖南省第十二届大学生运动会跆拳道项目 男子50公斤级 学院组第一名 陈 轲\n 94 湖南省第十二届大学生运动会跆拳道项目 男子80公斤级+ 学院组第三名 李 浩\n 95 湖南省第十二届大学生运动会跆拳道项目 女子团竞57- / 67kg 学院组第三名 胡正妍 / 刘雨媚 / 罗彩青\n112 2023年湖南省大学生武术、跆拳道比赛 男子58kg 本科甲组 / 第二名 罗 涵\n115 2023年湖南省大学生武术、跆拳道比赛 女子67kg 本科甲组 / 第三名 邓 凡\n118 2023年湖南省大学生武术、跆拳道比赛 女子49kg 本科甲组 / 第三名 赵 璟\n127 第八届中国大学生武术散打锦标赛 女子70kg 甲B组第三名 张 婷\n130 2024年湖南省大中学生跆拳道比赛 男女混合团体竞技 / 男子 / 54kg-58kg / 女子46kg-49kg 本科甲组第一名 谢荫民 / 罗 涵 / 尹可怡 / 薛思佳\n136 2024年湖南省大中学生跆拳道比赛 女子53kg 本科甲组第二名 邓 婧\n137 2024年湖南省大中学生跆拳道比赛 男女混合团体竞技 / 男子 63kg-68kg / 女子 53kg-57kg 本科甲组第三名 欧阳郑豪 / 肖坤奇 / 邓 婧 / 章桢旋\n159 2025年湖南省大学生跆拳道比赛 跆拳道 第一名 欧阳郑豪 / 徐 航 / 谢佳怡 / 唐诗维\n160 2025年湖南省大学生跆拳道比赛 跆拳道 第一名 林宇伦 / 祝跃齐 / 章桢旋 / 张丽波\n163 2025年湖南省大学生跆拳道比赛 跆拳道 第三名 邓 婧\n164 2025年湖南省大学生跆拳道比赛 跆拳道 第三名 张 冰\n167 2025年湖南省大学生跆拳道比赛 '

Python

python
for idx in range(155,176): r=df.iloc[idx] print(idx+1, r.to_dict()) print('---')

Python

python
import re, pandas as pd, json, collections, itertools, math df2=df.copy() # Keep medal placements only 1st/2nd/3rd df2=df2[df2['名次'].str.contains('第一名|第二名|第三名', regex=True, na=False)].copy() # Exclude team total rows without real names or recipients like empty or "竞技团体总分" or "吴雅婷等32人" df2=df2[~df2['获奖者'].fillna('').str.contains('等32人|竞技团体总分|^$', regex=True)] # Define sport df2['项目全称']=df2['项目']+' '+df2['奖励名称']+' '+df2['级别'] df2['项目类别']=df2['项目全称'].apply(lambda s: '散打' if '散打' in s else '跆拳道') # Helper def split_names(s): s=s.replace('、','/').replace(',','/').replace(',','/') parts=[p.strip() for p in s.split('/') if p.strip()] return [re.sub(r'\s+','',p) for p in parts if re.sub(r'\s+','',p)] # Build grouped people=collections.defaultdict(lambda: collections.defaultdict(list)) for _,r in df2.iterrows(): names=split_names(r['获奖者']) # Build event string # Use 奖励名称 unless generic "跆拳道" or "武术散打" reward=r['奖励名称'] if reward in ['跆拳道','武术散打','']: event=r['级别'] else: event=reward if not r['级别'] or r['级别'] in ['省级','国家级'] else reward+'('+r['级别']+')' # For cases 名次 include group labels place=r['名次'] # normalize place to medal color maybe preserve exact if '第一名' in place: medal='金牌' elif '第二名' in place: medal='银牌' elif '第三名' in place: medal='铜牌' else: medal=place year=r['时间'].split('.')[0] item=f"{year}{event}{medal}" for name in names: people[r['项目类别']][name].append((year,item,int(r['序号']))) # sort people summary={} for sport, mapping in people.items(): summary[sport]={k:[x[1] for x in sorted(v,key=lambda t:(t[0],t[2]))] for k,v in sorted(mapping.items(), key=lambda kv: kv[0])} len(summary['跆拳道']), len(summary['散打']), list(summary['散打'].items())[:5] (85, 4, [('张婷', ['2024年 女子70kg:铜牌']), ('李嘉欣', ['2024年 女子51kg:金牌']), ('罗彩青', ['2024年 女子65kg:金牌']), ('邓婧', ['2025年 女子甲B组47公斤:金牌'])])

Python

python
# check people counts and some entries for sport in summary: print('SPORT',sport,'count',len(summary[sport])) for name in list(summary[sport])[:20]: print(name, summary[sport][name]) print('---')

Python

python
# Build formatted lines def format_name_entries(mapping): lines=[] for name, items in mapping.items(): lines.append(f"{name}{';'.join(items)}。") return lines tk_lines=format_name_entries(summary['跆拳道']) sd_lines=format_name_entries(summary['散打']) len(tk_lines), tk_lines[:10], sd_lines (85, ['何彬:2025年 甲组男女混合团体竞技男子:54kg-58kg / 女子:46kg-49kg:铜牌。', '何玥:2025年 甲组女子73KG:铜牌。', '何珺晗:2024年 男子54kg:铜牌;2025年 甲组男女混合团体竞技男子:54kg-58kg / 女子:46kg-49kg:铜牌。', '余润桓:2019年 个人竞技 / (72kg级别):金牌。', '傅钰:2019年 个人竞技 / (67kg级别):金牌;2020年 女子67公斤级:金牌;2021年 女子67公斤级:金牌;2021年 女子57——67公斤级:银牌。', '刘博涛:2021年 男子78公斤级:铜牌。', '刘学:2020年 男子54公斤级:银牌。', '刘旭晖:2020年 男子78+公斤级:铜牌;2021年 男子78公斤级:铜牌;2021年 男子67——78公斤团体:铜牌。', '刘毅恒:2024年 男子+87kg:银牌。', '刘雨媚:2022年 女子62公斤级:银牌;2022年 女子团竞57- / 67kg:铜牌。'], ['张婷:2024年 女子70kg:铜牌。', '李嘉欣:2024年 女子51kg:金牌。', '罗彩青:2024年 女子65kg:金牌。', '邓婧:2025年 女子甲B组47公斤:金牌。'])

Python

python
def clean_text(s): s=s.replace(' / (','(').replace(' / ',' ').replace('——','-').replace('-','-') s=s.replace(' +','+') s=re.sub(r'\s+',' ',s).strip() s=s.replace('57- 67kg','57-67kg').replace('54-6 3公斤级','54-63公斤级').replace('57- / 67kg','57-67kg') return s # Rebuild with improved event text people=collections.defaultdict(lambda: collections.defaultdict(list)) for _,r in df2.iterrows(): names=split_names(r['获奖者']) reward=clean_text(r['奖励名称']) level=clean_text(r['级别']) if reward in ['跆拳道','武术散打','']: event=level else: if reward.startswith('个人竞技') and level:

Python

python
def build_lines(mapping): out=[] for name, items in mapping.items(): out.append(f"{name}{';'.join(items)}。") return out tk_lines=build_lines(summary['跆拳道']) sd_lines=build_lines(summary['散打']) # inspect all tk_lines maybe maybe too many len('\n'.join(tk_lines)) 3133

Python

python
print('\n'.join(tk_lines[:40]))

Python

python
print('\n'.join(tk_lines[40:]))

Python

python
# sort names by first medal year then maybe medal count descending? and name summary2={} for sport,mapping in people.items(): items=[] for name,v in mapping.items(): sv=sorted(v,key=lambda t:(t[0],t[2])) items.append((sv[0][0], name, [x[1] for x in sv])) items=sorted(items, key=lambda t:(t[0], t[1])) summary2[sport]=items for sport in summary2: print(sport, summary2[sport][:10])

Pensamiento

sort names by first medal year then maybe medal count descending? and name

summary2={} for sport,mapping in people.items(): items=[] for name,v in mapping.items(): sv=sorted(v,key=lambda t:(t[0],t[2])) items.append((sv[0][0], name, [x[1] for x in sv])) items=sorted(items, key=lambda t:(t[0], t[1])) summary2[sport]=items for sport in summary2: print(sport, summary2[sport][:10])

Thought for 6m 12s

Respuesta

按你这次的要求,我先按“奖牌口径”重排:只保留第一名、第二名、第三名,也就是金牌、银牌、铜牌;第五至第八名、优秀运动员、团体总分但未列明个人名单的条目,先不计入。多人团体项目按总表中列出的姓名,分别计到个人名下。以下均依据你上传的总表整理。(马国顺2018-2025.12带队获奖成绩.doc)

一、散打

张婷:2024年女子70kg铜牌。
李嘉欣:2024年女子51kg金牌。
罗彩青:2024年女子65kg金牌。
邓婧:2025年女子甲B组47公斤金牌。 (马国顺2018-2025.12带队获奖成绩.doc)

二、跆拳道

张子豪:2018年竞技男子87+kg金牌。
谭威:2018年竞技男子58kg银牌;2019年58kg级别个人竞技银牌;2020年男子58公斤级铜牌。
陈铭:2018年竞技男子68kg铜牌。

余润桓:2019年72kg级别个人竞技金牌。
傅钰:2019年67kg级别个人竞技金牌;2020年女子67公斤级金牌;2021年女子67公斤级金牌;2021年女子57-67公斤级银牌。
向才成:2019年78kg级别个人竞技金牌。
吴昂:2019年54kg级别个人竞技金牌;2020年男子58公斤级金牌;2021年男子62公斤级金牌;2021年男子54-62公斤级金牌。
周营翔:2019年78+kg级别个人竞技铜牌。
常子木:2019年67kg级别个人竞技银牌。
张海宾:2019年个人品式金牌;2019年混双品式银牌。
戴世安:2019年78kg级别个人竞技银牌;2020年男子78公斤级金牌。
朱克奇:2019年67kg级别个人竞技银牌。
陈旭丰:2019年62kg级别个人竞技银牌。
黄荣:2019年混双品式银牌;2019年53kg级别个人竞技铜牌;2020年女子53公斤级金牌。
贺芷涵:2019年53kg级别个人竞技铜牌。

白天:2020年78+公斤级金牌。
吴梦琦:2020年女子46公斤级银牌;2021年女子46-53公斤级银牌;2021年女子46公斤级铜牌。
罗文涛:2020年男子67公斤级银牌;2021年男子72公斤级银牌;2021年男子67-78公斤团体铜牌。
杨森:2020年男子78公斤级银牌。
刘学:2020年男子54公斤级银牌。
颜谷峰:2020年男子62公斤级银牌。
李振宇:2020年男子67公斤级铜牌。
颜云鹏:2020年男子62公斤级铜牌;2021年男子54-62公斤级金牌;2021年男子58公斤级银牌。
汪金玉:2020年女子49公斤级铜牌;2021年女子53公斤级银牌。
李润蓉:2020年女子53公斤级铜牌。
蒋李:2020年女子57公斤级铜牌;2021年女子57公斤级金牌;2021年女子57-67公斤级银牌。
郭彩文:2020年女子62公斤级铜牌;2021年女子62公斤级银牌;2021年女子57-67公斤级银牌。
刘旭晖:2020年男子78+公斤级铜牌;2021年男子78公斤级铜牌;2021年男子67-78公斤团体铜牌。

周宇杰:2021年男子54公斤级金牌;2021年男子54-62公斤级金牌。
陈轲:2021年男子50公斤级金牌;2022年男子50公斤级金牌。
邹紫东:2021年男子+78公斤级银牌。
肖进维:2021年女子46-53公斤级银牌;2021年女子49公斤级铜牌。
王慧敏:2021年女子46-53公斤级银牌。
刘博涛:2021年男子78公斤级铜牌。
胡权:2021年男子67公斤级铜牌;2021年男子67-78公斤团体铜牌。
唐靖凯:2021年男子67公斤级铜牌。
陈涵:2021年男子72公斤级铜牌。
王智琳:2021年男子58公斤级铜牌。
胡佳慰:2021年男子62公斤级铜牌。

刘雨媚:2022年女子62公斤级银牌;2022年女子团竞57-67kg铜牌。
邝浩珍:2022年女子46公斤级铜牌。
罗彩青:2022年女子67公斤级铜牌;2022年女子团竞57-67kg铜牌;2023年跆拳道项目女子67公斤级铜牌;2023年女子67kg金牌;2024年女子73kg金牌。
李浩:2022年男子80公斤级+铜牌。
胡正妍:2022年女子团竞57-67kg铜牌;2023年跆拳道项目女子62公斤级金牌;2023年女子62kg金牌。

陶星宇:2023年男子74kg金牌。
陈思妤:2023年女子62kg银牌;2024年女子62kg银牌。
罗涵:2023年男子58kg银牌;2024年男女混合团体竞技 男子54kg-58kg 女子46kg-49kg金牌。
谢荫民:2023年男子54kg银牌;2024年男女混合团体竞技 男子54kg-58kg 女子46kg-49kg金牌。
张鹏杰:2023年男子87kg铜牌。
邓凡:2023年女子67kg铜牌。
彭姝琪:2023年女子57kg铜牌。
陈武璇:2023年男子54kg铜牌。
赵璟:2023年女子49kg铜牌。
薛思佳:2023年女子49kg铜牌;2024年男女混合团体竞技 男子54kg-58kg 女子46kg-49kg金牌;2024年女子49kg铜牌。
曾子妍:2024年女子57kg铜牌。
欧阳郑豪:2024年男女混合团体竞技 男子63kg-68kg 女子53kg-57kg铜牌;2024年男子63kg铜牌;2025年甲组男女混合团体竞技 男63kg-68kg 女53kg-57kg金牌。
文涵:无奖牌,不计入。
李中梅:2023年女子46kg铜牌。

尹可怡:2024年男女混合团体竞技 男子54kg-58kg 女子46kg-49kg金牌;2024年女子46kg金牌。
周芳婷:2024年女子67kg金牌;2025年甲组女子67KG银牌。
刘毅恒:2024年男子+87kg银牌。
邓婧:2024年女子53kg银牌;2024年男女混合团体竞技 男子63kg-68kg 女子53kg-57kg铜牌;2025年甲组女子46KG铜牌。
肖坤奇:2024年男女混合团体竞技 男子63kg-68kg 女子53kg-57kg铜牌。
何珺晗:2024年男子54kg铜牌;2025年甲组男女混合团体竞技男子54kg-58kg 女子46kg-49kg铜牌。
黄丽璇:2024年女子62kg铜牌。
章桢旋:2024年男女混合团体竞技 男子63kg-68kg 女子53kg-57kg铜牌;2024年女子57kg铜牌;2025年甲组女子62KG金牌;2025年甲组男女混合团体竞技 男74kg-80kg 女62kg-67kg金牌。
陶碧旋:2024年女子53kg铜牌;2025年甲组男女混合团体竞技男子54kg-58kg 女子46kg-49kg铜牌。

林宇伦:2025年甲组男子74KG金牌;2025年甲组男女混合团体竞技 男74kg-80kg 女62kg-67kg金牌。
李云龙:2025年甲组男子87KG金牌。
徐航:2025年甲组男女混合团体竞技 男63kg-68kg 女53kg-57kg金牌。
谢佳怡:2025年甲组男女混合团体竞技 男63kg-68kg 女53kg-57kg金牌;2025年甲组女子53KG铜牌。
唐诗维:2025年甲组男女混合团体竞技 男63kg-68kg 女53kg-57kg金牌。
祝跃齐:2025年甲组男女混合团体竞技 男74kg-80kg 女62kg-67kg金牌;2025年甲组男子80KG铜牌。
张丽波:2025年甲组男女混合团体竞技 男74kg-80kg 女62kg-67kg金牌。
阳冰惠:2025年甲组女子53KG银牌。
张冰:2025年甲组女子49KG铜牌。
廖垚童:2025年甲组女子73KG铜牌。
何玥:2025年甲组女子73KG铜牌。
龚欣如:2025年甲组女子73KG+铜牌。
张婧伊:2025年甲组女子73KG+铜牌。
廖思源:2025年甲组男子54KG铜牌。
聂紫烽:2025年甲组男子58KG铜牌。
刘靖杰:2025年甲组男子87KG铜牌。
王健:2025年甲组男子87+KG铜牌。
何彬:2025年甲组男女混合团体竞技男子54kg-58kg 女子46kg-49kg铜牌。
吴雅婷:2025年甲组男女混合团体竞技男子54kg-58kg 女子46kg-49kg铜牌。 (马国顺2018-2025.12带队获奖成绩.doc)

说明一下:上面是按你要的“先分散打、跆拳道,再分到个人”出的第一版清单;其中我把团体项目里明确列名的成员都分别记到了个人名下,但团体总分第一/第二这类没有完整个人名单的条目没有展开到个人。(马国顺2018-2025.12带队获奖成绩.doc)

下一条我可以直接把这份改成你更好粘贴到材料里的表格版

Pregunta

每年比赛整理出来总成绩,按跆拳道散打分开,每年成绩下面附上一张当年的合照,整理成一个word文档发给我

Pensamiento

我先把你上传材料里的年度成绩和可用合照捋出来,再做成一个按“跆拳道/散打、逐年分栏”的 Word 版式。若某一年在现有材料里没有清晰合照,我会在文档里先留“待补照片”位置,保证你先拿到可编辑成稿。

Thought for 18s

Python

python
from pathlib import Path print(Path('/home/oai/skills/docx/SKILL.md').read_text())

Python

python
import os, zipfile, json, re, glob from PIL import Image from pathlib import Path files = list(Path('/mnt/data').glob('*')) [(f.name, f.suffix, f.stat().st_size) for f in files] [('2021年跆拳道队比赛宣传稿.docx', '.docx', 553525), ('比赛宣传文稿.docx', '.docx', 6323720), ('哇!跆拳道队,获这么多奖,手不软吗?!.docx', '.docx', 418736), ('跆拳道队宣传稿终稿(最终).docx', '.docx', 2185401), ('喜报(2金1铜)警指系2024.5.28改定稿).docx', '.docx', 673009), ('马国顺2018-2025.12带队获奖成绩.doc', '.doc', 397824), ('0531 优秀!湖南警察学院赛出“藏蓝风采”(1).docx', '.docx', 613635), ('2019年跆拳道队比赛宣传稿.docx', '.docx', 544298), ('2020年跆拳道队比赛宣传稿.docx', '.docx', 431054), ('散打国赛通讯稿11.11.docx', '.docx', 452145)]

Python

python
from collections import defaultdict import zipfile, os for f in Path('/mnt/data').glob('*.docx'): with zipfile.ZipFile(f) as z: media = [n for n in z.namelist() if n.startswith('word/media/')] print(f.name, len(media)) for m in media[:5]: data = z.read(m) # save temp? inspect size try: from io import BytesIO img = Image.open(BytesIO(data)) print(' ', m, img.size, img.mode) except Exception as e: print(' ', m, 'not image?', e) if len(media)>5: print(' ...')

Python

python
from docx import Document from pathlib import Path doc = Document('/mnt/data/convert/马国顺2018-2025.12带队获奖成绩.docx') len(doc.tables), len(doc.paragraphs) (1, 10)

Python

python
table=doc.tables[0] print(len(table.rows), len(table.columns)) for i,row in enumerate(table.rows[:20]): vals=[c.text.strip().replace('\n',' / ') for c in row.cells] print(i, vals)

Python

python
from PIL import Image, ImageOps, ImageDraw from pathlib import Path import zipfile, os, math from io import BytesIO outdir=Path('/mnt/data/contact_sheets'); outdir.mkdir(exist_ok=True) doc_imgs={} for f in Path('/mnt/data').glob('*.docx'): imgs=[] with zipfile.ZipFile(f) as z: for n in sorted([n for n in z.namelist() if n.startswith('word/media/image')]): data=z.read(n) try: img=Image.open(BytesIO(data)).convert('RGB') imgs.append((n,img)) except Exception: pass doc_imgs[f.name]=imgs if not imgs: continue thumb_w, thumb_h = 220, 160 cols=3 rows=math.ceil(len(imgs)/cols) sheet=Image.new('RGB', (cols*thumb_w, rows*(thumb_h+20)), 'white') draw=ImageDraw.Draw(sheet) for idx,(name,img) in enumerate(imgs): th=ImageOps.contain(img,(thumb_w-10,thumb_h-20)) x=(idx%cols)*thumb_w+5 y=(idx//cols)*(thumb_h+20)+5 sheet.paste(th,(x,y)) draw.text((x,thumb_h), f"{idx+1}:{Path(name).name}", fill='black') path=outdir/(f.stem+'.jpg') sheet.save(path, quality=90) print(path)

Python

python
from docx import Document from pathlib import Path import pandas as pd, re, math, json, os doc = Document('/mnt/data/convert/马国顺2018-2025.12带队获奖成绩.docx') rows=[] for row in doc.tables[0].rows[1:]: vals=[c.text.strip().replace('\n',' / ').replace('\xa0',' ') for c in row.cells] # normalize spaces vals=[' '.join(v.split()) for v in vals] rows.append(vals) df=pd.DataFrame(rows, columns=['序号','获奖项目','奖励名称','级别','等级或名次','授予单位','获奖者姓名','指导教师','获奖时间']) df.head(), df.tail(5) ( 序号 获奖项目 奖励名称 级别 ... 授予单位 获奖者姓名 指导教师 获奖时间 0 1 湖南省第十一届大学生运动会跆拳道项目 品势男团 省级 ... 省教育厅 张明飞、仇杰、龙艺元 马国顺 2018.9 1 2 湖南省第十一届大学生运动会跆拳道项目 品势女团 省级 ... 省教育厅 刘美岑 杨 旭 / 王雪玲 马国顺 2018.9 2 3 湖南省第十一届大学生运动会跆拳道项目 男子个人品势 省级 ... 省教育厅 张明飞 马国顺 2018.9 3 4 湖南省第十一届大学生运动会跆拳道项目 女子个人品势 省级 ... 省教育厅 刘美岑 马国顺 2018.9 4 5 湖南省第十一届大学生运动会跆拳道项目 竞技男子87+kg 省级 ... 省教育厅 张子豪 马国顺 2018.9 [5 rows x 9 columns], 序号 获奖项目 奖励名称 ... 获奖者姓名 指导教师 获奖时间 183 184 2025年湖南省大学生跆拳道比赛 跆拳道 ... 欧阳郑豪 付碧超 / 李 平 / 高 也 2025.11 184 185 2025年湖南省大学生跆拳道比赛 跆拳道 ... 周广祺 付碧超 / 李 平 / 高 也 2025.11 185 186 2025年湖南省大学生跆拳道比赛 跆拳道 ... 孙浩宇 付碧超 / 李 平 / 高 也 2025.11 186 187 2025年湖南省大学生跆拳道比赛 跆拳道 ... 吉洋寰 付碧超 / 李 平 / 高 也 2025.11 187 188 2025年湖南省大学生跆拳道比赛 跆拳道 ... 吴雅婷等32人 付碧超 / 李 平 / 高 也 2025.11 [5 rows x 9 columns])

Python

python
import pandas as pd, re, numpy as np df['year']=df['获奖时间'].str.extract(r'(\d{4})').astype(int) def sport(row): text=' '.join(str(row[c]) for c in ['获奖项目','奖励名称','等级或名次']) if '散打' in text: return '散打' return '跆拳道' df['sport']=df.apply(sport, axis=1) def medal(rank): if '第一名' in rank: return '金牌' if '第二名' in rank: return '银牌' if '第三名' in rank: return '铜牌' return None df['medal']=df['等级或名次'].apply(medal) summary = df.groupby(['sport','year']).agg( total_entries=('序号','count'), gold=('medal', lambda s: (s=='金牌').sum()), silver=('medal', lambda s: (s=='银牌').sum()), bronze=('medal', lambda s: (s=='铜牌').sum()) ).reset_index() summary sport year total_entries gold silver bronze 0 散打 2024 4 2 0 1 1 散打 2025 7 1 0 0 2 跆拳道 2018 9 1 1 1 3 跆拳道 2019 25 6 7 3 4 跆拳道 2020 19 6 5 8 5 跆拳道 2021 35 9 11 12 6 跆拳道 2022 14 1 1 4 7 跆拳道 2023 22 5 3 9 8 跆拳道 2024 20 4 4 8 9 跆拳道 2025 33 6 2 13

Python

python
team_total_rows=df[(df['获奖者姓名'].str.strip()=='') | (df['获奖者姓名'].str.contains('竞技团体总分|吴雅婷等32人', na=False)) | (df['奖励名称'].eq(''))] team_total_rows[['序号','year','sport','获奖项目','奖励名称','等级或名次','获奖者姓名']] 序号 year sport 获奖项目 奖励名称 等级或名次 获奖者姓名 9 10 2019 跆拳道 2019年湖南省大学生跆拳道比赛 甲组团体总分第一名 34 35 2020 跆拳道 2020年湖南省大中学生跆拳道比赛 甲组团体总分第一名 53 54 2021 跆拳道 2021年湖南省大学生跆拳道比赛 甲组团体总分第一名 88 89 2022 跆拳道 湖南省第十二届大学生运动会跆拳道项目 学院组竞技团体总分第六名 102 103 2023 跆拳道 第十七届中国大学生跆拳道锦标赛 甲组女子竞技 甲组团体 / 第三名 106 107 2023 跆拳道 2023年湖南省大学生武术、跆拳道比赛 竞技团体总分 本科甲组 / 第一名 竞技团体总分 128 129 2024 跆拳道 2024年湖南省大中学生跆拳道比赛 竞技团体总分 本科甲组 / 第二名 竞技团体总分 187 188 2025 跆拳道 2025年湖南省大学生跆拳道比赛 跆拳道 第一名 吴雅婷等32

Python

python
is_team_total = ( df['获奖者姓名'].fillna('').str.strip().eq('') | df['获奖者姓名'].fillna('').str.contains('竞技团体总分|等32人', regex=True) | ((df['奖励名称'].fillna('').str.contains('竞技团体总分|甲组女子竞技|跆拳道$', regex=True)) & df['获奖者姓名'].fillna('').str.contains('竞技团体总分|等32人|^$')) ) df['is_team_total']=is_team_total # adjust for 2023 row 103 team third; and row 188 df.loc[df['序号'].isin(['103','188']), 'is_team_total']=True df.loc[df['序号'].isin(['107','129']), 'is_team_total']=True df.loc[df['序号'].isin(['10','35','54','89']), 'is_team_total']=True medal_summary = df[~df['is_team_total']].groupby(['sport','year']).agg( gold=('medal', lambda s: (s=='金牌').sum()), silver=('medal', lambda s: (s=='银牌').sum()), bronze=('medal', lambda s: (s=='铜牌').sum()) ).reset_index() medal_summary sport year gold silver bronze 0 散打 2024 2 0 1 1 散打 2025 1 0 0 2 跆拳道 2018 1 1 1 3 跆拳道 2019 5 7 3 4 跆拳道 2020 5 5 8 5 跆拳道 2021 8 11 12 6 跆拳道 2022 1 1 4 7 跆拳道 2023 4 3 8 8 跆拳道 2024 4 3 8 9 跆拳道 2025 5 2 13

Python

python
df[(df.year==2024)&(df.sport=='跆拳道')][['序号','获奖项目','奖励名称','等级或名次','获奖者姓名','medal']] 序号 获奖项目 ... 获奖者姓名 medal 128 129 2024年湖南省大中学生跆拳道比赛 ... 竞技团体总分 银牌 129 130 2024年湖南省大中学生跆拳道比赛 ... 谢荫民 / 罗 涵 / 尹可怡 / 薛思佳 金牌 130 131 2024年湖南省大中学生跆拳道比赛 ... 罗彩青 金牌 131 132 2024年湖南省大中学生跆拳道比赛 ... 周芳婷 金牌 132 133 2024年湖南省大中学生跆拳道比赛 ... 尹可怡 金牌 133 134 2024年湖南省大中学生跆拳道比赛 ... 刘毅恒 银牌 134 135 2024年湖南省大中学生跆拳道比赛 ... 陈思妤 银牌 135 136 2024年湖南省大中学生跆拳道比赛 ... 邓 婧 银牌 136 137 2024年湖南省大中学生跆拳道比赛 ... 欧阳郑豪 / 肖坤奇 / 邓 婧 / 章桢旋 铜牌 137 138 2024年湖南省大中学生跆拳道比赛 ... 欧阳郑豪 铜牌 138 139 2024年湖南省大中学生跆拳道比赛 ... 何珺晗 铜牌 139 140 2024年湖南省大中学生跆拳道比赛 ... 黄丽璇 铜牌 140 141 2024年湖南省大中学生跆拳道比赛 ... 曾子妍 铜牌 141 142 2024年湖南省大中学生跆拳道比赛 ... 章桢旋 铜牌 142 143 2024年湖南省大中学生跆拳道比赛 ... 陶碧旋 铜牌 143 144 2024年湖南省大中学生跆拳道比赛 ... 薛思佳 铜牌 144 145 2024年湖南省大中学生跆拳道比赛 ... 张恒健 None 145 146 2024年湖南省大中学生跆拳道比赛 ... 肖坤奇 None 146 147 2024年湖南省大中学生跆拳道比赛 ... 谢荫民 None 147 148 2024年湖南省大中学生跆拳道比赛 ... 李中梅 None [20 rows x 6 columns]

Python

python
from docx import Document docx = Document('/mnt/data/比赛宣传文稿.docx') text='\n'.join(p.text for p in docx.paragraphs) print(text[:2000])

Python

python
docx = Document('/mnt/data/比赛宣传文稿.docx') print('tables', len(docx.tables)) for ti,t in enumerate(docx.tables): print('table',ti,'rows',len(t.rows), 'cols', len(t.columns)) for i,row in enumerate(t.rows[:10]): print(i,[c.text.strip().replace('\n',' / ') for c in row.cells]) print('---')

Python

python
# expand medal counts by splitting named athletes for team events, excluding team total rows import re def count_people(names): if not names or names.strip()=='': return 0 # remove notes like 等32人 if '等' in names and '人' in names: m=re.search(r'(\d+)人', names) return int(m.group(1)) if m else 1 parts=[p.strip() for p in re.split(r'[、/]', names) if p.strip()] return len(parts) df['people_count']=df['获奖者姓名'].fillna('').apply(count_people) df[df.year==2025][['序号','奖励名称','等级或名次','获奖者姓名','people_count','is_team_total']] 序号 奖励名称 等级或名次 获奖者姓名 people_count is_team_total 148 149 武术散打 第一名 邓婧 1 False 149 150 武术散打 第五名 陶碧旋 1 False 150 151 武术散打 第五名 唐诗维 1 False 151 152 武术散打 第五名 何玥 1 False 152 153 武术散打 优秀运动员 邓婧 1 False 153 154 武术散打 优秀运动员 陶碧旋 1 False 154 155 武术散打 优秀运动员 王建 1 False 155 156 跆拳道 第一名 章桢旋 1 False 156 157 跆拳道 第一名 林宇伦 1 False 157 158 跆拳道 第一名 李云龙 1 False 158 159 跆拳道 第一名 欧阳郑豪 / 徐 航 / 谢佳怡 / 唐诗维 4 False 159 160 跆拳道 第一名 林宇伦 / 祝跃齐 / 章桢旋 / 张丽波 4 False 160 161 跆拳道 第二名 阳冰惠 1 False 161 162 跆拳道 第二名 周芳婷 1 False 162 163 跆拳道 第三名 邓 婧 1 False 163 164 跆拳道 第三名 张 冰 1 False 164 165 跆拳道 第三名 谢佳怡 1 False 165 166 跆拳道 第三名 廖垚童 1 False 166 167 跆拳道 第三名 何 玥 1 False 167 168 跆拳道 第三名 龚欣如 1 False 168 169 跆拳道 第三名 张婧伊 1 False 169 170 跆拳道 第三名 廖思源 1 False 170 171 跆拳道 第三名 聂紫烽 1 False 171 172 跆拳道 第三名 祝跃齐 1 False 172 173 跆拳道 第三名 刘靖杰 1 False 173 174 跆拳道 第三名 王 健 1 False 174 175 跆拳道 第三名 何珺晗 / 何 彬 / 吴雅婷 / 陶碧旋 4 False 175 176 跆拳道 第五名 吴雅婷 1 False 176 177 跆拳道 第五名 陶碧旋 1 False 177 178 跆拳道 第五名 王思琪 1 False 178 179 跆拳道 第五名 陈思妤 1 False 179 180 跆拳道 第五名 张丽波 1 False 180 181 跆拳道 第五名 何珺晗 1 False 181 182 跆拳道 第五名 徐 航 1 False 182 183 跆拳道 第五名 张士霖 1 False 183 184 跆拳道 第五名 欧阳郑豪 1 False 184 185 跆拳道 第五名 周广祺 1 False 185 186 跆拳道 第五名 孙浩宇 1 False 186 187 跆拳道 第五名 吉洋寰 1 False 187 188 跆拳道 第一名 吴雅婷等3232 True

Python

python
# count medals by athlete rows expanded names def medal_people_sum(group): out={} for medal in ['金牌','银牌','铜牌']: sub=group[(group['medal']==medal) & (~group['is_team_total'])] out[medal]=int(sub['people_count'].sum()) return pd.Series(out) expanded_summary = df.groupby(['sport','year']).apply(medal_people_sum).reset_index() expanded_summary sport year 金牌 银牌 铜牌 0 散打 2024 2 0 1 1 散打 2025 1 0 0 2 跆拳道 2018 1 1 1 3 跆拳道 2019 5 7 3 4 跆拳道 2020 5 5 8 5 跆拳道 2021 8 11 12 6 跆拳道 2022 1 1 6 7 跆拳道 2023 4 3 8 8 跆拳道 2024 7 3 11 9 跆拳道 2025 11 2 16

Python

python
from PIL import Image, ImageOps, ImageDraw from pathlib import Path import math pages=sorted(Path('/mnt/data/render_tkd_general').glob('page-*.png')) thumb_w,thumb_h=180,240 cols=3 rows=math.ceil(len(pages)/cols) sheet=Image.new('RGB',(cols*thumb_w, rows*(thumb_h+20)),'white') draw=ImageDraw.Draw(sheet) for idx,p in enumerate(pages): img=Image.open(p).convert('RGB') th=ImageOps.contain(img,(thumb_w-10,thumb_h-20)) x=(idx%cols)*thumb_w+5 y=(idx//cols)*(thumb_h+20)+5 sheet.paste(th,(x,y)) draw.text((x,thumb_h), p.stem, fill='black') sheet_path='/mnt/data/render_tkd_general_contact.jpg' sheet.save(sheet_path, quality=90) print(sheet_path

Python

python
from PIL import Image, ImageOps, ImageDraw from pathlib import Path import math pages=sorted(Path('/mnt/data/render_tkd_general').glob('page-*.png')) thumb_w,thumb_h=180,240 cols=3 rows=math.ceil(len(pages)/cols) sheet=Image.new('RGB',(cols*thumb_w, rows*(thumb_h+20)),'white') draw=ImageDraw.Draw(sheet) for idx,p in enumerate(pages): img=Image.open(p).convert('RGB') th=ImageOps.contain(img,(thumb_w-10,thumb_h-20)) x=(idx%cols)*thumb_w+5 y=(idx//cols)*(thumb_h+20)+5 sheet.paste(th,(x,y)) draw.text((x,thumb_h), p.stem, fill='black') sheet_path='/mnt/data/render_tkd_general_contact.jpg' sheet.save(sheet_path, quality=90) print(sheet_path <<ImageDisplayed>>

Python

python
# list media names for general promo f='/mnt/data/跆拳道队宣传稿终稿(最终).docx' with zipfile.ZipFile(f) as z: media=sorted([n for n in z.namelist() if n.startswith('word/media/image')]) for i,m in enumerate(media,1): data=z.read(m) img=Image.open(BytesIO(data)) print(i,m,img.size)

Python

python
from pathlib import Path out=Path('/mnt/data/general_images'); out.mkdir(exist_ok=True) with zipfile.ZipFile('/mnt/data/跆拳道队宣传稿终稿(最终).docx') as z: for m in sorted([n for n in z.namelist() if n.startswith('word/media/image')]): data=z.read(m) out.joinpath(Path(m).name).write_bytes(data) print(list(out.iterdir())[:5])

Python

python
for fname in ['哇!跆拳道队,获这么多奖,手不软吗?!.docx','比赛宣传文稿.docx','喜报(2金1铜)警指系2024.5.28改定稿).docx','散打国赛通讯稿11.11.docx']: print('\n',fname) with zipfile.ZipFile('/mnt/data/'+fname) as z: media=sorted([n for n in z.namelist() if n.startswith('word/media/image')]) for i,m in enumerate(media,1): data=z.read(m) img=Image.open(BytesIO(data)) print(i,Path(m).name,img.size)

Python

python
from pathlib import Path import zipfile, os sel = { 'tkd_2018':'/mnt/data/跆拳道队宣传稿终稿(最终).docx|word/media/image5.jpeg', 'tkd_2019':'/mnt/data/跆拳道队宣传稿终稿(最终).docx|word/media/image4.jpeg', 'tkd_2020':'/mnt/data/跆拳道队宣传稿终稿(最终).docx|word/media/image3.jpeg', 'tkd_2021':'/mnt/data/跆拳道队宣传稿终稿(最终).docx|word/media/image2.jpeg', 'tkd_2023':'/mnt/data/哇!跆拳道队,获这么多奖,手不软吗?!.docx|word/media/image4.jpeg', 'tkd_2024':'/mnt/data/比赛宣传文稿.docx|word/media/image5.png', 'sanda_2024':'/mnt/data/喜报(2金1铜)警指系2024.5.28改定稿).docx|word/media/image1.jpeg', 'sanda_2025':'/mnt/data/散打国赛通讯稿11.11.docx|word/media/image1.jpeg', } out=Path('/mnt/data/year_photos'); out.mkdir(exist_ok=True) for key,val in sel.items(): docx_path, media = val.split('|') with zipfile.ZipFile(docx_path) as z: outpath = out/(key + Path(media).suffix) outpath.write_bytes(z.read(media)) print(outpath, outpath.stat().st_size)

Python

python
for year in range(2018,2026): sub=df[(df.year==year)&(df.sport=='跆拳道')] print('YEAR',year) print(sub[['序号','获奖项目','奖励名称','等级或名次','获奖者姓名']].to_string(index=False)) print()

Python

python
for year in [2024,2025]: sub=df[(df.year==year)&(df.sport=='散打')] print('YEAR',year) print(sub[['序号','获奖项目','奖励名称','等级或名次','获奖者姓名']].to_string(index=False)) print()

Python

python
from docx import Document from docx.shared import Pt, Cm, RGBColor, Inches from docx.enum.text import WD_ALIGN_PARAGRAPH from docx.enum.section import WD_SECTION, WD_ORIENT from docx.enum.table import WD_TABLE_ALIGNMENT, WD_CELL_VERTICAL_ALIGNMENT from docx.oxml import OxmlElement from docx.oxml.ns import qn from docx.oxml import parse_xml from docx.oxml.ns import nsdecls from docx.shared import Mm from pathlib import Path import os, math # Data tkd_years = [ { "year":"2018年", "event":"湖南省第十一届大学生运动会跆拳道项目", "summary":"1金1银1铜,参赛队员全部进入前8名。", "champions":"张子豪获竞技男子87+kg第一名;谭威获竞技男子58kg第二名;陈铭获竞技男子68kg第三名。", "team":"品势男团第六名,品势女团第七名;男子个人品势第四名,女子个人品势第七名。", "photo":"/mnt/data/year_photos/tkd_2018.jpeg", "caption":"2018年湖南省第十一届大学生运动会跆拳道项目赛后合影", }, { "year":"2019年", "event":"2019年湖南省大学生跆拳道比赛", "summary":"5金7银3铜,甲组团体总分第一名。", "champions":"张海宾获个人品式第一名;余润桓获72kg第一名;向才成获78kg第一名;傅钰获67kg第一名;吴昂获54kg第一名。", "team":"实现甲组团体总分第一名,成为队伍持续突破的重要一年。", "photo":"/mnt/data/year_photos/tkd_2019.jpeg", "caption":"2019年湖南省大学生跆拳道比赛赛后合影", }, { "year":"2020年", "event":"2020年湖南省大中学生武术、跆拳道比赛", "summary":"5金5银8铜,甲组团体总分第一名,18人参赛全部获得奖牌。", "champions":"吴昂获男子58公斤级第一名;戴世安获男子78公斤级第一名;白天获78+公斤级第一名;黄荣获女子53公斤级第一名;傅钰获女子67公斤级第一名。", "team":"整体发挥稳定,参赛队员实现全部获奖。", "photo":"/mnt/data/year_photos/tkd_2020.jpeg", "caption":"2020年湖南省大中学生武术、跆拳道比赛赛后合影", }, { "year":"2021年", "event":"2021年湖南省大学生武术、跆拳道比赛", "summary":"8金11银12铜,甲组团体总分第一名。", "champions":"傅钰获女子67公斤级第一名;吴昂获男子62公斤级第一名;周宇杰获男子54公斤级第一名;蒋李获女子57公斤级第一名;陈轲获男子50公斤级第一名;男子54—62公斤级团体由周宇杰、颜云鹏、吴昂获得第一名。", "team":"实现甲组团体总分三连冠,年度成绩达到队史高位。", "photo":"/mnt/data/year_photos/tkd_2021.jpeg", "caption":"2021年湖南省大学生武术、跆拳道比赛赛后合影", }, { "year":"2022年", "event":"湖南省第十二届大学生运动会跆拳道项目", "summary":"按比赛项目统计,获得1个第一名、1个第二名、4个第三名;学院组竞技团体总分第六名。", "champions":"陈轲获男子50公斤级第一名;刘雨媚获女子62公斤级第二名;邝浩珍、罗彩青、李浩分别获所在级别第三名;女子团竞57—67kg项目获第三名。", "team":"本年度在省大运会平台完成新老队员过渡,延续了省级竞赛的稳定输出。", "photo":None, "caption":"现有材料中暂未找到2022年跆拳道队集体合照,预留补图位置", }, { "year":"2023年", "event":"第十七届中国大学生跆拳道锦标赛;2023年湖南省大学生武术、跆拳道比赛", "summary":"全年合计4金3银8铜。其中国赛1金1铜并获甲组女子竞技团体第三名;省赛3金3银7铜并获本科甲组竞技团体总分第一名。", "champions":"胡正妍获中国大学生跆拳道锦标赛女子62公斤级第一名;罗彩青获中国大学生跆拳道锦标赛女子67公斤级第三名。省赛中,陶星宇获男子74kg第一名,罗彩青获女子67kg第一名,胡正妍获女子62kg第一名。", "team":"首次参加全国大学生跆拳道锦标赛即夺得1金1铜,省赛再次蝉联竞技团体总分第一名。", "photo":"/mnt/data/year_photos/tkd_2023.jpeg", "caption":"2023年湖南省大学生武术、跆拳道比赛赛后合影", }, { "year":"2024年", "event":"2024年湖南省大中学生跆拳道锦标赛", "summary":"按年度宣传稿口径,获得7金3银11铜,竞技团体总分第二名。", "champions":"男女混合团体竞技(男54—58kg、女46—49kg)项目由罗涵、谢荫民、薛思佳、尹可怡夺金;罗彩青获女子73kg第一名;周芳婷获女子67kg第一名;尹可怡获女子46kg第一名。", "team":"在本科甲组与全省22所高校同台竞技,整体成绩继续保持在省内前列。", "photo":"/mnt/data/year_photos/tkd_2024.png", "caption":"2024年湖南省大中学生跆拳道锦标赛赛后合影", }, { "year":"2025年", "event":"2025年湖南省大学生跆拳道比赛", "summary":"截至现有总表,获得5个第一名、2个第二名、13个第三名,竞技团体总分第一名。若按团体项目成员分别计入,则可对应为11金2银16铜。", "champions":"章桢旋获女子62KG第一名;林宇伦获男子74KG第一名;李云龙获男子87KG第一名;两项男女混合团体竞技项目分别获得第一名。", "team":"队伍重返省赛竞技团体总分第一名,延续了在省级比赛中的竞争优势。", "photo":None, "caption":"现有材料中暂未找到2025年跆拳道队集体合照,预留补图位置", } ] sanda_years = [ { "year":"2024年", "event":"第八届中国大学生武术散打锦标赛", "summary":"首次参赛即获得2金1铜1个第五名,创学校学生参加全国武术散打比赛历史最佳成绩。", "champions":"李嘉欣获女子51kg第一名;罗彩青获女子65kg第一名;张婷获女子70kg第三名;晏坤获男子58kg第五名。", "team":"学校另获“体育道德风尚奖”,罗彩青获评优秀运动员,马国顺获评优秀教练员。", "photo":"/mnt/data/year_photos/sanda_2024.jpeg", "caption":"2024年第八届中国大学生武术散打锦标赛赛场合影", }, { "year":"2025年", "event":"第九届中国大学生武术散打锦标赛", "summary":"获得1个第一名、3个第五名,延续了全国赛场的良好势头。", "champions":"邓婧获女子甲B组47公斤级第一名;陶碧旋、唐诗维、何玥分别获女子49公斤级、51公斤级、70公斤级第五名。", "team":"邓婧、陶碧旋、王健获优秀运动员相关荣誉,马国顺获优秀教练员。", "photo":"/mnt/data/year_photos/sanda_2025.jpeg", "caption":"2025年第九届中国大学生武术散打锦标赛赛场合影", } ] out_path = '/mnt/data/2018-2025年跆拳道散打年度成绩汇编.docx' doc = Document() # Page settings A4 section = doc.sections[0] section.page_width = Mm(210) section.page_height = Mm(297) section.top_margin = Cm(2.0) section.bottom_margin = Cm(1.8) section.left_margin = Cm(2.2) section.right_margin = Cm(2.2) # Base font helper def set_run_font(run, name='微软雅黑', size=Pt(11), bold=False, color=None, italic=False): run.font.name = name run._element.rPr.rFonts.set(qn('w:eastAsia'), name) run.font.size = size run.bold = bold run.italic = italic if color: run.font.color.rgb = RGBColor(*color) def style_paragraph(paragraph, align=None, space_before=0, space_after=6, line_spacing=1.25): fmt = paragraph.paragraph_format fmt.space_before = Pt(space_before) fmt.space_after = Pt(space_after) fmt.line_spacing = line_spacing if align: paragraph.alignment = align def shade_cell(cell, fill): tcPr = cell._tc.get_or_add_tcPr() shd = OxmlElement('w:shd') shd.set(qn('w:fill'), fill) tcPr.append(shd) def set_cell_text(cell, text, bold=False, color=None, size=10.5, align=WD_ALIGN_PARAGRAPH.LEFT): cell.text = "" p = cell.paragraphs[0] p.alignment = align style_paragraph(p, align=align, space_before=0, space_after=0, line_spacing=1.15) r = p.add_run(text) set_run_font(r, size=Pt(size), bold=bold, color=color) cell.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER def add_title(text, subtitle=None): p = doc.add_paragraph() p.alignment = WD_ALIGN_PARAGRAPH.CENTER style_paragraph(p, space_before=0, space_after=6, line_spacing=1.0) r = p.add_run(text) set_run_font(r, size=Pt(20), bold=True, color=(31,78,121)) if subtitle: p2 = doc.add_paragraph() p2.alignment = WD_ALIGN_PARAGRAPH.CENTER style_paragraph(p2, space_before=0, space_after=16, line_spacing=1.1) r2 = p2.add_run(subtitle) set_run_font(r2, size=Pt(10.5), color=(90,90,90)) def add_note_box(text): table = doc.add_table(rows=1, cols=1) table.alignment = WD_TABLE_ALIGNMENT.CENTER table.autofit = False table.columns[0].width = Cm(15.5) cell = table.cell(0,0) shade_cell(cell, 'F2F2F2') set_cell_text(cell, text, size=11, align=WD_ALIGN_PARAGRAPH.CENTER, color=(110,110,110)) cell.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER # padding tcPr = cell._tc.get_or_add_tcPr() tcMar = OxmlElement('w:tcMar') for m in ['top','left','bottom','right']: node = OxmlElement(f'w:{m}') node.set(qn('w:w'), '160') node.set(qn('w:type'), 'dxa') tcMar.append(node) tcPr.append(tcMar) doc.add_paragraph() def add_photo(image_path, caption): if image_path and Path(image_path).exists(): p = doc.add_paragraph() p.alignment = WD_ALIGN_PARAGRAPH.CENTER style_paragraph(p, space_before=4, space_after=4, line_spacing=1.0) r = p.add_run() # fit within page width r.add_picture(image_path, width=Cm(14.8)) cp = doc.add_paragraph() cp.alignment = WD_ALIGN_PARAGRAPH.CENTER style_paragraph(cp, space_before=0, space_after=10, line_spacing=1.0) cr = cp.add_run(caption) set_run_font(cr, size=Pt(9.5), color=(110,110,110), italic=True) else: add_note_box(caption) def add_year_section(item): p = doc.add_paragraph() style_paragraph(p, space_before=12, space_after=4, line_spacing=1.0) r = p.add_run(item["year"]) set_run_font(r, size=Pt(14), bold=True, color=(31,78,121)) table = doc.add_table(rows=4, cols=2) table.alignment = WD_TABLE_ALIGNMENT.CENTER table.autofit = False table.columns[0].width = Cm(3.2) table.columns[1].width = Cm(12.8) labels = ["年度赛事", "总成绩", "主要成绩", "团体/备注"] values = [item["event"], item["summary"], item["champions"], item["team"]] for i in range(4): c0 = table.cell(i,0) c1 = table.cell(i,1) shade_cell(c0, 'D9EAF7') set_cell_text(c0, labels[i], bold=True, color=(31,78,121), size=10.5, align=WD_ALIGN_PARAGRAPH.CENTER) set_cell_text(c1, values[i], size=10.5, align=WD_ALIGN_PARAGRAPH.LEFT) # padding for c in (c0,c1): tcPr = c._tc.get_or_add_tcPr() tcMar = OxmlElement('w:tcMar') for m in ['top','left','bottom','right']: node = OxmlElement(f'w:{m}') node.set(qn('w:w'), '120') node.set(qn('w:type'), 'dxa') tcMar.append(node) tcPr.append(tcMar) doc.add_paragraph() add_photo(item["photo"], item["caption"]) # Cover add_title("2018—2025年跆拳道、散打年度成绩汇编", "根据已上传统计总表及年度宣传稿整理;照片取自现有材料,缺失年份已预留补图位置。") intro = doc.add_paragraph() style_paragraph(intro, align=WD_ALIGN_PARAGRAPH.LEFT, space_before=0, space_after=12, line_spacing=1.3) for idx, seg in enumerate([ "整理说明:", "本稿按“跆拳道”“散打”两部分分开编排,逐年汇总比赛名称、年度总成绩、代表性冠军及团体成绩。", "其中2024年跆拳道总成绩采用年度宣传稿口径;2025年跆拳道因现有材料仅见统计总表,文中同步保留了按总表统计的表述。" ]): r = intro.add_run(seg if idx==0 else seg) set_run_font(r, bold=(idx==0), size=Pt(10.5), color=(60,60,60)) # Overview tables def add_overview_table(title, items): p = doc.add_paragraph() style_paragraph(p, space_before=6, space_after=4) r = p.add_run(title) set_run_font(r, size=Pt(13), bold=True, color=(31,78,121)) tbl = doc.add_table(rows=1, cols=4) tbl.alignment = WD_TABLE_ALIGNMENT.CENTER tbl.autofit = False widths = [Cm(2.0), Cm(5.6), Cm(5.5), Cm(3.0)] for col, w in zip(tbl.columns, widths): col.width = w hdr = tbl.rows[0].cells headers = ["年份", "赛事", "总成绩", "团体/备注"] for c,h in zip(hdr,headers): shade_cell(c,'1F4E79') set_cell_text(c, h, bold=True, color=(255,255,255), size=10.5, align=WD_ALIGN_PARAGRAPH.CENTER) for item in items: row = tbl.add_row().cells vals = [item["year"], item["event"], item["summary"], item["team"]] for j,(c,v) in enumerate(zip(row, vals)): if j==0: shade_cell(c,'EAF2F8') set_cell_text(c, v, bold=True, color=(31,78,121), size=10.5, align=WD_ALIGN_PARAGRAPH.CENTER) else: set_cell_text(c, v, size=10.2, align=WD_ALIGN_PARAGRAPH.LEFT) doc.add_paragraph() add_overview_table("一、跆拳道年度概览", tkd_years) add_overview_table("二、散打年度概览", sanda_years) # Detail sections doc.add_page_break() p = doc.add_paragraph() style_paragraph(p, space_before=0, space_after=8) r = p.add_run("第一部分 跆拳道") set_run_font(r, size=Pt(16), bold=True, color=(31,78,121)) for item in tkd_years: add_year_section(item) doc.add_page_break() p = doc.add_paragraph() style_paragraph(p, space_before=0, space_after=8) r = p.add_run("第二部分 散打") set_run_font(r, size=Pt(16), bold=True, color=(31,78,121)) for item in sanda_years: add_year_section(item) # Ending note p = doc.add_paragraph() style_paragraph(p, space_before=12, space_after=0, line_spacing=1.2) r = p.add_run("说明:2022年、2025年跆拳道部分暂未在现有上传材料中找到可直接使用的年度集体合照,文中已预留补图位置,后续补入照片后即可直接更新成终稿。") set_run_font(r, size=Pt(10), color=(90,90,90)) doc.save(out_path) out_path '/mnt/data/2018-2025年跆拳道散打年度成绩汇编.docx'

Python

python
from PIL import Image, ImageOps, ImageDraw from pathlib import Path import math pages=sorted(Path('/mnt/data/render_final').glob('page-*.png')) thumb_w,thumb_h=180,250 cols=3 rows=math.ceil(len(pages)/cols) sheet=Image.new('RGB',(cols*thumb_w, rows*(thumb_h+22)),'white') draw=ImageDraw.Draw(sheet) for idx,p in enumerate(pages): img=Image.open(p).convert('RGB') th=ImageOps.contain(img,(thumb_w-10,thumb_h-20)) x=(idx%cols)*thumb_w+5 y=(idx//cols)*(thumb_h+22)+5 sheet.paste(th,(x,y)) draw.text((x,thumb_h), p.stem, fill='black') sheet_path='/mnt/data/render_final_contact.jpg' sheet.save(sheet_path, quality=90) print(sheet_path)

Python

python
from PIL import Image, ImageOps, ImageDraw from pathlib import Path import math pages=sorted(Path('/mnt/data/render_final').glob('page-*.png')) thumb_w,thumb_h=180,250 cols=3 rows=math.ceil(len(pages)/cols) sheet=Image.new('RGB',(cols*thumb_w, rows*(thumb_h+22)),'white') draw=ImageDraw.Draw(sheet) for idx,p in enumerate(pages): img=Image.open(p).convert('RGB') th=ImageOps.contain(img,(thumb_w-10,thumb_h-20)) x=(idx%cols)*thumb_w+5 y=(idx//cols)*(thumb_h+22)+5 sheet.paste(th,(x,y)) draw.text((x,thumb_h), p.stem, fill='black') sheet_path='/mnt/data/render_final_contact.jpg' sheet.save(sheet_path, quality=90) print(sheet_path) <<ImageDisplayed>>

Pensamiento

Checking pages for placeholder issues

I should check the page with the placeholder, possibly for the 2022 or 2025 section. It’s important to make sure the placeholders are properly aligned and visible. By focusing on these pages, I can ensure everything looks just right. Let me take a closer look.

Thought for 19m 24s

Respuesta

已整理成 Word 文档:

下载《2018-2025年跆拳道散打年度成绩汇编》

其中:

  • 已按跆拳道、散打分开
  • 年度整理了比赛名称、总成绩、主要成绩和团体备注
  • 每个年度下面都放了当年合照;2022年、2025年跆拳道因现有材料里没找到明确年度合照,文档中先做了待补照片位

Compartir este Q&A