Red Alert 2 Unit Attribute Summary_20201009_

Place the red alert rule file rules.ini in the working directory, and run the following code, you can summarize the attribute information of the soldiers, tanks and construction units in the red alert in the excel table. The
related files are placed in the resource file.

#红警单位属性信息汇总
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']]


Data: https://download.csdn.net/download/weixin_45590329/12916392

Guess you like

Origin blog.csdn.net/weixin_45590329/article/details/108987718