-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain_prog_xml-players.py
89 lines (69 loc) · 3.47 KB
/
main_prog_xml-players.py
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import os
import xml.etree.ElementTree as ET
# Temps à rajouter au début et à la fin de chaque clip
rajout = 5
# Définir le dossier d'entrée et de sortie
dossier_entree = './xml-import'
dossier_sortie = './xml-export'
# Fonction pour ajuster les plages de temps
def ajuster_temps(instances, ajustement=rajout):
for instance in instances:
start_time = float(instance.find('start').text)
end_time = float(instance.find('end').text)
# Ajuster le début et la fin de chaque plage de temps
instance.find('start').text = str(start_time - ajustement)
instance.find('end').text = str(end_time + ajustement)
# Fonction pour fusionner les instances qui se chevauchent et ont le même "code"
def fusionner_instances(instances):
instances = sorted(instances, key=lambda x: float(x.find('start').text))
fusionnes = []
instance_courante = instances[0]
for instance in instances[1:]:
# Vérifier s'il y a un chevauchement ET si le code est identique
if (float(instance.find('start').text) <= float(instance_courante.find('end').text) and
instance.find('code').text == instance_courante.find('code').text):
# Fusionner en ajustant la fin
instance_courante.find('end').text = str(max(float(instance_courante.find('end').text),
float(instance.find('end').text)))
# Concaténer les informations supplémentaires si nécessaire
for label in instance.findall('label'):
instance_courante.append(label)
else:
# Si pas de chevauchement ou "code" différent, ajouter l'instance courante à la liste fusionnée
fusionnes.append(instance_courante)
instance_courante = instance
# Ajouter la dernière instance à la liste fusionnée
fusionnes.append(instance_courante)
return fusionnes
# Fonction pour traiter un fichier XML donné
def traiter_fichier_xml(fichier_entree, fichier_sortie):
# Charger le fichier XML
tree = ET.parse(fichier_entree)
root = tree.find('ALL_INSTANCES')
# Extraire toutes les instances
instances = root.findall('instance')
# Étape 1 : Ajuster les plages de temps
ajuster_temps(instances)
# Étape 2 : Fusionner les instances qui se chevauchent et ont le même "code"
instances_fusionnees = fusionner_instances(instances)
# Remplacer l'ancien contenu par les instances fusionnées
root.clear() # On efface toutes les anciennes instances
for instance in instances_fusionnees:
root.append(instance)
# Sauvegarder le fichier XML modifié
tree.write(fichier_sortie)
# Fonction pour traiter tous les fichiers XML dans le dossier d'entrée
def traiter_tous_les_fichiers(dossier_entree, dossier_sortie):
# Vérifier si le dossier de sortie existe, sinon le créer
if not os.path.exists(dossier_sortie):
os.makedirs(dossier_sortie)
# Parcourir tous les fichiers dans le dossier d'entrée
for fichier in os.listdir(dossier_entree):
if fichier.endswith(".xml"):
fichier_entree = os.path.join(dossier_entree, fichier)
fichier_sortie = os.path.join(dossier_sortie, fichier)
print(f"Traitement du fichier : {fichier_entree}")
traiter_fichier_xml(fichier_entree, fichier_sortie)
print(f"Fichier transformé enregistré dans : {fichier_sortie}")
# Exécuter le programme
traiter_tous_les_fichiers(dossier_entree, dossier_sortie)