-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.py
More file actions
83 lines (72 loc) · 2.81 KB
/
utils.py
File metadata and controls
83 lines (72 loc) · 2.81 KB
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
# coding: utf-8
# Imports généraux
import os
import inspect
import json
import pandas as pd
import numpy as np
"""
Utilitaires pour la gestion des fichiers.
PBa, 2023-11
"""
def abs_path(fic: str) -> str:
""" Fonction utilitaire pour récupérer le path absolu d'un fichier.
:param fic: path absolu ou relatif (par rapport au script d'appel) d'un fichier
:return: path asbolu normalisé du fichier
"""
try:
if not os.path.isabs(fic):
fic_appel = inspect.stack()[1].filename # Script d'appel
rep_appel = os.path.dirname(fic_appel) # Répertoire du script d'appel
fic = os.path.join(rep_appel, fic)
return os.path.normpath(fic)
except Exception as e:
print(f"utils.abs_path Exception: {e}")
raise
def json_load(fic_nom: str) -> 'dict | list':
""" Fonction utilitaire pour lire un fichier json.
:param fic_nom: path absolu ou relatif du fichier json à lire
:return: contenu du fichier json monté sous forme de dictionnaire / liste
"""
try:
fic = abs_path(fic_nom)
with open(fic, 'r', encoding='utf8') as fi:
return json.loads(fi.read())
except FileNotFoundError as e:
print(f"utils.json_load Exception: {e}")
raise
except Exception as e:
print(f"utils.json_load Exception: {e}")
raise
def get_lst(obj: object) -> 'list | object':
""" Fonction utilitaire pour se protéger contre une liste à 1 seul élément,
par exemple pour éviter le parcours d'une chaîne caractère par caractère.
:param obj: liste à protéger
:return: liste, éventuellement à 1 seul élément, mais sous forme de liste
"""
if isinstance(obj, str): # Cas d'une chaine
return [obj]
elif isinstance(obj, (np.ndarray, np.generic)): # Cas d'un tableau numpy
return obj.tolist()
elif isinstance(obj, pd.Series): # Cas du retour d'une sélection de DataFrame par exemple, qui donne une pd.Series et non une list
return obj.tolist()
elif not isinstance(obj, list): # Cas d'un seul élément
return [obj]
else: # Cas par défaut, tout va bien !
return obj
def dic_remove(dic_in: dict, lst_rem: list = None) -> dict:
""" Fonction utilitaire pour supprimer une liste de clés dans un dictionnaire,
et renvoyer un nouveau dictionnaire mis à jour.
:param dic_in: dictionnaire de départ
:param lst_rem: liste des clés à supprimer
:return: nouveau dictionnaire
"""
lst_rem = get_lst(lst_rem)
return dict([(k, v) for k, v in dic_in.items() if k not in lst_rem])
if __name__ == "__main__":
print(abs_path('toto'))
print(json_load('localisation.json'))
lst = pd.Series([1])
print(f"{type(get_lst(lst))}")
for a in get_lst(lst):
print(a)