Bonjour à tous,

Je m'intéresse depuis peu au langage Python pour lequel j'ai appris les rudiments grâce aux tutoriels accessibles sur ce site.


J'essaye de traiter des données de logs d'un jeu pour pouvoir en tirer certaines statistiques.

Celui-ci se compose ainsi (extrait):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
T:10 AType:9 AID:39936 COUNTRY:101 POS(184785.5938, 2.6443, 240943.4375) IDS()
T:68510 AType:12 ID:700446 TYPE:Bf 110 G-2 COUNTRY:201 NAME:noname PID:-1 POS(259973.9219,49.5342,54857.3594)
T:68510 AType:12 ID:701470 TYPE:BotPilot_Bf109 COUNTRY:201 NAME:BotPilot_Bf109 PID:700446 POS(259973.7656,49.9501,54856.1445)
T:68510 AType:10 PLID:700446 PID:701470 BUL:6450 SH:0 BOMB:6 RCT:0 (259973.9219,49.4752,54857.3555)
T:130301 AType:1 AMMO:SHELL_GER_20x82_HE AID:781354 TID:1040430
T:130303 AType:2 DMG:0.0005 AID:-1 TID:1040430 POS(244528.1563,3838.3601,132309.1563)
T = temps écoulé
AType:X = type évènement
ID = identifiant de l'objet
COUNTRY = n° de pays
POS = coordonnées x,y,z
AMMO = munitions utilisées
PID = PilotID
AID = Airplane ID
TID = Target ID

Les éléments que je souhaite pouvoir ressortir sont par exemple:
- Liste des objets détruits (selon le type et la nation)
- Liste des objets endommagés et non détruits (selon le type et la nation)
- Liste des pilotes tués
- Munitions utilisées par nation
- Avions utilisés par aéroports
- etc...


Je ne sais pas comment organiser mon travail, dois-je créer des classes ou non, etc... ?

Pour l'instant, j'ai commencé à créer des dictionnaires pour les aéroports (et compte faire de même pour les avions et les pilotes):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
missionreport = open ("missionReport(2018-11-21_20-45-18)[0].txt", "r")
 
 
 
airfield = []
 
while 1:
    text = missionreport.readline()
    condition = "AType:9"
    if condition in text:
            textsplit = text.split()
            airfieldNumber = textsplit[2]
            airfieldNumber = int(airfieldNumber[4:10])
            country = textsplit[3]
            country = int(country[8:11])
            positionx = textsplit[4]
            positionx = float (positionx[4:14])
            positiony = textsplit[5]
            positiony = float (positiony[0:6])
            positionz = textsplit[6]
            positionz = float (positionz[0:10])
            airfield.append({"airfieldNumber" : airfieldNumber, "country" : country, "position" : (positionx, positiony, positionz)})
    if text == "":
        break
 
print (airfield)
Ce qui donne une liste de dictionnaire

Code : Sélectionner tout - Visualiser dans une fenêtre à part
[{'airfieldNumber': 39936, 'country': 101, 'position': (184785.593, 2.6443, 240943.437)}, {'airfieldNumber': 88064, 'country': 101, 'position': (229651.187, 54.84, 186389.89)}, {'airfieldNumber': 91136, 'country': 201, 'position': (270552.656, 64.004, 149697.609)}, {'airfieldNumber': 102400, 'country': 101, 'position': (224910.171, 27.547, 237144.687)}, {'airfieldNumber': 182272, 'country': 201, 'position': (274105.531, 62.012, 120702.828)}, {'airfieldNumber': 540672, 'country': 201, 'position': (258118.234, 42.488, 49440.5781)}, {'airfieldNumber': 573440, 'country': 201, 'position': (259973.921, 47.668, 54857.3633)}, {'airfieldNumber': 604160, 'country': 201, 'position': (242543.484, 72.571, 80632.625)}, {'airfieldNumber': 182272, 'country': 201, 'position': (274105.531, 62.012, 120702.828)}, {'airfieldNumber': 182272, 'country': 201, 'position': (274105.531, 62.012, 120702.828)}, {'airfieldNumber': 182272, 'country': 201, 'position': (274105.531, 62.012, 120702.828)}, {'airfieldNumber': 182272, 'country': 201, 'position': (274105.531, 62.012, 120702.828)}, {'airfieldNumber': 182272, 'country': 201, 'position': (274105.531, 62.012, 120702.828)}, {'airfieldNumber': 182272, 'country': 201, 'position': (274105.531, 62.012, 120702.828)}, {'airfieldNumber': 182272, 'country': 201, 'position': (274105.531, 62.012, 120702.828)}, {'airfieldNumber': 182272, 'country': 201, 'position': (274105.531, 62.012, 120702.828)}, {'airfieldNumber': 182272, 'country': 201, 'position': (274105.531, 62.012, 120702.828)}, {'airfieldNumber': 182272, 'country': 201, 'position': (274105.531, 62.012, 120702.828)}, {'airfieldNumber': 182272, 'country': 201, 'position': (274105.531, 62.012, 120702.828)}, {'airfieldNumber': 182272, 'country': 201, 'position': (274105.531, 62.012, 120702.828)}, {'airfieldNumber': 182272, 'country': 201, 'position': (274105.531, 62.012, 120702.828)}, {'airfieldNumber': 182272, 'country': 201, 'position': (274105.531, 62.012, 120702.828)}, {'airfieldNumber': 182272, 'country': 201, 'position': (274105.531, 62.012, 120702.828)}, {'airfieldNumber': 182272, 'country': 201, 'position': (274105.531, 62.012, 120702.828)}, {'airfieldNumber': 182272, 'country': 201, 'position': (274105.531, 62.012, 120702.828)}, {'airfieldNumber': 91136, 'country': 101, 'position': (270552.656, 64.004, 149697.609)}, {'airfieldNumber': 604160, 'country': 201, 'position': (242543.484, 72.571, 80632.625)}, {'airfieldNumber': 604160, 'country': 201, 'position': (242543.484, 72.571, 80632.625)}, {'airfieldNumber': 604160, 'country': 201, 'position': (242543.484, 72.571, 80632.625)}, {'airfieldNumber': 604160, 'country': 201, 'position': (242543.484, 72.571, 80632.625)}, {'airfieldNumber': 604160, 'country': 201, 'position': (242543.484, 72.571, 80632.625)}, {'airfieldNumber': 604160, 'country': 201, 'position': (242543.484, 72.571, 80632.625)}, {'airfieldNumber': 604160, 'country': 201, 'position': (242543.484, 72.571, 80632.625)}, {'airfieldNumber': 604160, 'country': 201, 'position': (242543.484, 72.571, 80632.625)}]
Mais je rencontre déjà deux problèmes:
- ligne 19: positiony = float (positiony[0:6]) // les coordonnées sont sur 6 ou 7 caractères => ici j'ai mis 6 car sinon je prends la virgule
- ligne 22 : j'ai des doublons et je n'arrive pas à gérer avec la condition "if airfieldNumber not in airfield" (problème je compare avec la liste et non le contenu de la bibliothèque elle même)

Pouvez-vous m'aiguillez ?

Merci d'avance