Obtenez des options en Python à partir des fichiers JSON et des arguments de ligne de commande

Il s'agit de la version Python d'un autre article, «Obtenir des options dans Ruby à partir des fichiers JSON et des arguments de ligne de commande» (https://qiita.com/aikige/items/014139c0b1ae70139477). Puisque l'utilisation de Python a augmenté récemment, je partagerai le résultat de l'examen de la façon d'écrire la même chose avec Python.

Concept de base

  1. Rassemblez les options dans un seul objet. Exemple: options de classe
  2. Lisez les options du fichier JSON lors de la création de l'objet. Exemple: opt = Options ('some.json') lit les options d'un fichier JSON.
  3. Utilisez l'attribut de l'objet pour accéder aux options. Exemple: vous pouvez y accéder comme opt.option_1.
  4. Capturez les arguments de ligne de commande à l'aide de Argparse.
  5. L'objet facultatif a une méthode pour récupérer la valeur du résultat généré par Arguparse. Exemple: importez avec quelque chose comme opt.import_opt (options).

Exemple d'implémentation

https://gist.github.com/aikige/470f4ef93753638cc3a18d62e195eb19

#!/usr/bin/env python

import json
import os

class Options:
    OPTS = { 'option_1': 'bool', 'option_2': 'str' }

    def __init__(self, filename='config.json'):
        if (os.path.exists(filename)):
            with open(filename) as f:
                self.import_dict(json.load(f))

    def import_attr(self, key, value):
        if (value is None):
            return
        if (isinstance(value, eval(self.OPTS[key]))):
            setattr(self, key, value)
        else:
            raise ValueError("invalid type")

    def import_dict(self, d):
        for key in self.OPTS.keys():
            if (key in d.keys()):
                self.import_attr(key, d[key])

    def import_opt(self, args):
        for key in self.OPTS.keys():
            if (hasattr(args, key)):
                self.import_attr(key, getattr(args, key))

if __name__ == '__main__':
    import argparse

    opt = Options()
    print(vars(opt))

    parser = argparse.ArgumentParser()
    parser.add_argument('-1', '--option_1', action='store_true', default=None)
    parser.add_argument('-2', '--option_2', type=str)
    args = parser.parse_args()
    print(vars(args))
    opt.import_opt(args)
    print(vars(opt))

Principales différences par rapport à la version Ruby

  1. Contrairement à Ruby, Python a un type bool, donc la détermination de type peut être incorporée relativement facilement ( import_attr).
  2. Dans le cas de Python, Arrgparse est utilisé pour l'analyse des options, de sorte que les méthodes d'analyse JSON et d'analyse des arguments ne sont pas unifiées. , Légèrement redondant.
  3. Dans le cas de Python, il semble un peu difficile de rendre l'attribut en lecture seule, donc je l'ai omis.

Recommended Posts

Obtenez des options en Python à partir des fichiers JSON et des arguments de ligne de commande
Lire et écrire des fichiers JSON avec Python
Décomposer les arguments de commande en une seule ligne en Python
Comment obtenir une chaîne à partir d'un argument de ligne de commande en python
Lire et écrire des fichiers CSV et JSON avec Python
Charger et exécuter la commande depuis yml avec python
Obtenez le fichier, la fonction, le numéro de ligne en cours d'exécution en python
Récupérer des fichiers depuis Linux en utilisant paramiko et scp [Python]
[Python] Lire les arguments de ligne de commande à partir du nom de fichier ou de stdin
Obtenir des données de Quandl en Python
Manipuler des fichiers et des dossiers en Python
Lire et utiliser des fichiers Python à partir de Python
Gestion des fichiers JSON en Python
Exporter et exporter des fichiers en Python
Extraire des chaînes de fichiers avec Python
python Remarque: déterminez si l'argument de ligne de commande est dans la liste
Obtenez des taux de change à partir des taux de change ouverts en Python
Graphique à lignes pliées et ligne d'échelle en python
Lire et écrire des fichiers JSON avec Python
Obtenez le niveau de la batterie de SwitchBot avec Python
Obtenez la probabilité de précipitation de XML avec Python
Obtenir l'historique des métriques de MLflow en Python
Lecture à partir de fichiers texte et SQLite avec Python (+ Pandas), R, Julia (+ DataFrames)
Obtenez des données de séries chronologiques de k-db.com avec Python
Modèle pour créer des applications de ligne de commande en Python
[Python] Récupérez les fichiers dans le dossier avec Python
Étude à partir de Python Lecture et écriture de fichiers Hour9
Comment obtenir les fichiers dans le dossier [Python]
[Introduction à Udemy Python3 + Application] 67. Arguments de ligne de commande
POST JSON avec Python et recevez avec PHP
Je veux obtenir le nom du fichier, le numéro de ligne et le nom de la fonction dans Python 3.4
Obtenez uniquement des articles de pages Web en Python
Comment passer des arguments lors de l'appel d'un script python depuis Blender sur la ligne de commande
série python2 / série 3, code de caractère et instruction d'impression / ligne de commande
Spécifiez une sous-commande comme argument de ligne de commande en Python
Inclure et utiliser des fichiers Kv externes avec Python Kivy
Obtenez des données du module GPS à 10 Hz avec Python
Comment télécharger des fichiers depuis Selenium of Python dans Chrome
Importez des classes dans des fichiers jar directement à partir d'un script Python
Obtenir les informations de localisation actuelles et l'agent utilisateur en Python
Conversion mutuelle entre JSON et YAML / TOML en Python
Recevoir des e-mails de Gmail et étiqueter avec Python3
Obtenez les cours des actions et créez des graphiques en bougies avec Python
Recherche récursive de fichiers et de répertoires en Python et sortie
Manipulation de json en python
Exécuter des commandes depuis Python
Obtenir la date en Python
Exécuter la commande depuis Python
Obtenir des informations telles que l'utilisation du GPU à partir de Python (commande nvidia-smi)
Comparez HTTP GET / POST avec cURL (commande) et Python (programmation)
Autoriser l'installation des outils de ligne de commande en Python
Obtenez votre fréquence cardiaque à partir de l'API fitbit en Python!
Rechercher des fichiers volumineux sous Linux à partir de la ligne de commande
Obtenez le type MIME en Python et déterminez le format de fichier
Obtenez la valeur tout en spécifiant la valeur par défaut de dict en Python
Comment spécifier des arguments de ligne de commande lors du débogage avec PyCharm
Autoriser Python à sélectionner la chaîne de caractères du fichier d'entrée dans le dossier
Obtenez la date et l'heure actuelles en Python, en tenant compte du décalage horaire
Appuyez sur REST en Python pour obtenir des données de New Relic
Prédire le sexe à partir du nom à l'aide de l'API Gender et de Pykakasi en Python
Obtenir des constantes de macro à partir du fichier d'en-tête C (++) (.h) en Python