如何从TXT文件提取数据,统计指定年份与国家的演员出现次数
解决方案
步骤拆解与代码实现
1. 优化数据读取(更高效安全)
你原来的代码重复打开了两次文件,这里用with语句简化,自动管理文件资源:
with open("/content/drive/My Drive/netflix.txt", "r") as f: data = [line.strip().split('\t') for line in f]
2. 筛选符合条件的数据
假设你已经通过校验得到了有效的start_year(起始年份,整数)、end_year(结束年份,整数)和target_country(目标国家),用列表推导式快速筛选:
# 筛选年份在范围内且国家匹配的数据 filtered_data = [ item for item in data if start_year <= int(item[4]) <= end_year and item[3] == target_country ]
item[4]对应release_year,需转成整数才能和输入年份比较item[3]对应country,直接和目标国家字符串匹配
3. 拆分演员并统计频次
用collections.Counter可以高效统计演员出现次数,注意演员字段通常是多个演员用", "分隔,需要拆分后逐个统计:
from collections import Counter actor_counter = Counter() for item in filtered_data: # 处理空演员字段的情况,避免报错 cast_list = item[2].split(', ') if item[2] else [] actor_counter.update(cast_list)
4. 输出统计结果
按出现次数从高到低排序输出:
print(f"{start_year}-{end_year}年{target_country}电影演员出镜次数统计:") for actor, count in sorted(actor_counter.items(), key=lambda x: x[1], reverse=True): print(f"{actor}: {count}次")
完整示例代码
整合所有步骤,包含异常数据处理(比如年份格式无效的情况):
from collections import Counter # 读取数据 with open("/content/drive/My Drive/netflix.txt", "r") as f: data = [line.strip().split('\t') for line in f] # 假设已完成输入校验,这里用示例值 start_year = 2010 end_year = 2020 target_country = "United States" # 筛选数据(处理年份无效的异常) filtered_data = [] for item in data: try: release_year = int(item[4]) if start_year <= release_year <= end_year and item[3] == target_country: filtered_data.append(item) except ValueError: # 跳过年份格式错误的数据 continue # 统计演员次数 actor_counter = Counter() for item in filtered_data: cast_list = item[2].split(', ') if item[2] else [] actor_counter.update(cast_list) # 输出结果 print(f"{start_year}-{end_year}年{target_country}电影演员出镜次数统计:") for actor, count in sorted(actor_counter.items(), key=lambda x: x[1], reverse=True): print(f"{actor}: {count}")
注意事项
- 如果演员字段的分隔符不是
", "(比如只有逗号无空格),调整split(',')即可 - 若存在多国家数据(比如
"United States, Canada"),需要修改匹配逻辑,比如用target_country in item[3]
内容的提问来源于stack exchange,提问作者Octaey
相关产品推荐
相关产品推荐

