Python文本文件处理:实现球队与所属节点的映射反转
嘿,这事儿不难!我来给你梳理下后续的处理逻辑,直接上代码加解释,一看就懂~
核心思路与实现代码
我们需要用一个字典来映射每个球队和它所属的所有节点编号,然后按步骤处理每行数据,最后输出成要求的格式。以下是完整的处理代码(包含文件读写,如果你已经打开了文件,也可以适配进去):
# 初始化一个字典,用来存球队对应的节点列表 team_node_map = {} # 读取输入文件(如果已经打开文件,直接用你的文件对象遍历即可) with open('input.txt', 'r', encoding='utf-8') as input_file: for line in input_file: # 先去掉行首尾的空白,跳过空行 clean_line = line.strip() if not clean_line: continue # 拆分节点编号和球队部分:只拆分一次,避免球队名称里的空格被拆分 node_part, teams_part = clean_line.split(maxsplit=1) node_id = node_part.strip() # 把球队部分按逗号拆分,得到单个球队,同时清理每个球队名称的空格 teams = [team.strip() for team in teams_part.split(',')] # 遍历每个球队,更新字典 for team in teams: if team not in team_node_map: team_node_map[team] = [] # 将当前节点编号加入该球队的列表 team_node_map[team].append(node_id) # 写入新文件 with open('output.txt', 'w', encoding='utf-8') as output_file: # 可以按球队名称排序输出,也可以保留原出现顺序 for team in sorted(team_node_map.keys()): # 把节点列表转成逗号分隔的字符串 nodes_str = ','.join(team_node_map[team]) output_file.write(f"{team} {nodes_str}\n")
关键细节说明
split(maxsplit=1):这个很重要!因为像"atalanta bilbao"这种带空格的球队名称,不能用普通的split()拆分,只拆一次就能精准分离节点编号和所有球队的部分。team.strip():处理球队名称前后可能的空格(比如输入里的" cska"),避免同一个球队因为空格被当成不同键。- 排序输出:用
sorted(team_node_map.keys())可以让输出的球队按字母顺序排列,如果你想保持球队在原文件中第一次出现的顺序,Python 3.7+的字典本身就是有序的,直接遍历team_node_map即可。
测试你的输入后,输出会符合预期,比如:
real madrid 1 barcelona 1,9 chelsea 1,2 ...
内容的提问来源于stack exchange,提问作者Lee Yaan
相关产品推荐
相关产品推荐

