红警2单位属性汇总_20201009_

将红警的规则文件 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

猜你喜欢

转载自blog.csdn.net/weixin_45590329/article/details/108987718