mobility-team / mobility

Mobility, an open-source library for mobility modelisation
MIT License
16 stars 10 forks source link

Erreur lecture fichier Excel des unités urbaines #91

Open lucas-boh opened 6 months ago

lucas-boh commented 6 months ago

Bonjour,

Je ne parviens pas à lire le fichier des catégories d'unités urbaines des villes, téléchargé dans mobility/parsers/urban_units.py (branche stage-2-model). Les données sont utilisées dans transport_zones.py :

urban_units = pd.read_excel(data_folder_path / "UU2020_au_01-01-2023.xlsx", 
                      sheet_name = "Composition_communale", skiprows = 5)

Cela renvoie une erreur qui semble concerner le codage des couleurs :

ValueError: Colors must be aRGB hex values

C'est une erreur qui a l'air d'être récurrence sur certains fichiers de l'INSEE : https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1699.

Je n'arrive pas à contourner l'erreur, à part en retirant à la main sur Excel les couleurs utilisées. Tu arrives à lire le fichier sans encombre @FlxPo ?

Versions : pandas 2.1.4, openpyxl 3.0.10

FlxPo commented 6 months ago

Oui j'ai eu le même problème. Seule solution trouvée pour le moment, un monkey patch d'openpyxl :

# Monkey patch openpyxl to avoid an error when opening the urban units INSEE file
# Source : https://stackoverflow.com/questions/71733414/copying-from-a-range-of-cells-with-openpyxl-error-colors-must-be-argb-hex-valu
from openpyxl.styles.colors import WHITE, RGB
__old_rgb_set__ = RGB.__set__
def __rgb_set_fixed__(self, instance, value):
    try:
        __old_rgb_set__(self, instance, value)
    except ValueError as e:
        if e.args[0] == 'Colors must be aRGB hex values':
            __old_rgb_set__(self, instance, WHITE)
RGB.__set__ = __rgb_set_fixed__

Il y a sûrement une manière propre de faire ça, mais je n'ai pas pris le temps de chercher.