将红警的规则文件 rules.ini 放置在工作目录,运行如下代码,便可以将红警中的士兵,战车和建筑单位相关属性信息汇总在excel表格中
相关文件都放置于资源文件中
#红警单位属性信息汇总
import pandas as pd
pd.set_option('display.max_columns', None)# 显示所有列
pd.set_option('display.width', 300)#设置显示数据的宽度
import re
#1.文件读取
file=open('rules.txt')#打开文件
txt=file.read()
list_txt=txt.split('; **')
print(list_txt)
#将各个单位名称和属性数据汇总为字典 单位名称:单位数据
list_unit=txt.split('\n\n')
for unit_data in list_unit:
if '[' not in unit_data:
list_unit.remove(unit_data)
dict_unit_data={}#用于存储单位名称和属性数据的字典
for unit_data in list_unit:
try:
unit_name=re.findall('\[(\w*)\]',unit_data)[0]
dict_unit_data[unit_name]=unit_data
except:
continue
#汇总栏题目和栏内容
dict_txt={}
for item in list_txt:
#item=list_txt[2]
try:
key=re.findall('\*\*\s(.*)\s\*\*',item)[0]
value=re.findall('\*\*\n;([\s\S]*)',item)[0]
dict_txt[key]=value
except:
continue
#汇总四大种类名称
list_type_titles=[]
for key in dict_txt.keys():
if 'Type List' in key:
list_type_titles.append(key)
#汇总四大种类下各个单位名称
dict_unit_titles={}#用于存储各个种类的单位名称
for type in list_type_titles:
#type=list_type_titles[2]
titles_unit=dict_txt[type]
title_unit=re.findall('\n\w{1,3}=(\w*)',titles_unit)
dict_unit_titles[type]=title_unit
#存储所有类型和所有单位的名称属性
dict_all_attributes={}#用于存储所有类型和所有单位的名称属性 类型:类型下的所有单位属性字典{单位:属性字典{属性:属性值}}
for type in dict_unit_titles.keys():
#type=list_type_titles[2]
dict_type_attributes={}#用于存储各个类型的单位属性字典 单位名称:单位属性字典
for unit in dict_unit_titles[type]:
#unit=dict_unit_titles[type][2]
try:
unit_data=dict_unit_data[unit]#单位的数据
#获得单位通俗名称
unit_name_=re.findall('([\s\S]*)\n\[',unit_data)
if len(unit_name_)==0:unit_name=''
else:unit_name=unit_name_[0]
list_unit_data = unit_data.split('\n')
dict_unit_attributes = {'unit_name': unit_name} # 用于存储单位属性和属性值的字典 属性:属性值
for item in list_unit_data:
# item=list_YURI[0]
try:
if '=' in item:
key = re.findall('(\w*)=', item)[0]
if ';' in item:
value_ = re.findall('=([\s\S]*);', item)
else:
value_ = re.findall('=([\s\S]*)', item)
if len(value_) == 0:
value = ''
else:
value = value_[0]
dict_unit_attributes[key] = value
except:
continue
dict_type_attributes[unit]=dict_unit_attributes
except:
continue
dict_all_attributes[type]=dict_type_attributes
#获得各个类型的属性
dict_attributes={}#用于存储各个类型的属性值 类型:属性值集合列表
for type in dict_all_attributes.keys():
type_attributes=[]
for unit in dict_all_attributes[type].keys():
attributes=list(dict_all_attributes[type][unit].keys())
type_attributes.extend(attributes)
type_attributes=list(set(type_attributes))
dict_attributes[type]=type_attributes
#生成用于存贮各个类型单位属性值的空表格
dict_data={}
for type in dict_attributes.keys():
#type=list(dict_attributes.keys())[2]
columns=dict_attributes[type]
data=pd.DataFrame(columns=columns)
dict_data[type]=data
#统计每个类型单位数量
for type in dict_all_attributes.keys():
print(type,len(dict_all_attributes[type]))
#将每个单位属性值存储在上面表格中
for type in dict_all_attributes.keys():
# type=list(dict_attributes.keys())[2]
data=dict_data[type]
for unit in dict_all_attributes[type].keys():
#unit=list(dict_all_attributes[type].keys())[2]
data_unit=pd.DataFrame(dict_all_attributes[type][unit].values(),index=dict_all_attributes[type][unit].keys()).T
data_unit['Name']=unit
data=data.append(data_unit)
data.index=data['Name']
dict_data[type]=data
#将不同的数据框填写在一个Excel工作簿中的不同表格内
import openpyxl
pd.DataFrame().to_excel('红警单位数据统计.xlsx') # 创建空白表格,准备填入数据
wb = openpyxl.load_workbook('红警单位数据统计.xlsx') # 将空白表格指定为wb
writer = pd.ExcelWriter('红警单位数据统计.xlsx', engine='openpyxl') # 准备往空白表格写入数据
writer.book = wb # 执行写入目标为空白表格
for type in dict_data.keys():
dict_data[type].to_excel(writer, sheet_name=type)
writer.save()
writer.close()
#对结果进行描述统计
#获得各个数据集合
dict_data.keys()
Infantry=dict_data['Infantry Type List']
Vehicle=dict_data['Vehicle Type List']
Aircraft=dict_data['Aircraft Type List']
Building=dict_data['Building Type List']
#分析士兵Infantry
Infantry=pd.DataFrame(Infantry)
for column in Infantry.columns:
print(column)
Infantry=Infantry[['unit_name','Name','Armor','Category','Cost','Strength','Speed','Crashable','DieSound','Primary','EliteAbilities','ElitePrimary','EliteSecondary','IFVMode','Owner','Size','Soylent']]
数据:https://download.csdn.net/download/weixin_45590329/12916392