Rufen Sie Optionen in Python sowohl aus JSON-Dateien als auch aus Befehlszeilenargumenten ab

Dies ist die Python-Version eines anderen Artikels, "Abrufen von Optionen in Ruby aus JSON-Dateien und Befehlszeilenargumenten" (https://qiita.com/aikige/items/014139c0b1ae70139477). Da die Verwendung von Python heutzutage zunimmt, werde ich das Ergebnis der Untersuchung darüber teilen, wie man dasselbe mit Python schreibt.

Basiskonzept

  1. Sammeln Sie Optionen in einem Objekt. Beispiel: Klassenoptionen
  2. Lesen Sie beim Erstellen des Objekts Optionen aus der JSON-Datei. Beispiel: opt = Options ('some.json') liest Optionen aus einer JSON-Datei.
  3. Verwenden Sie das Objektattribut, um auf Optionen zuzugreifen. Beispiel: Sie können wie opt.option_1 darauf zugreifen.
  4. Erfassen Sie Befehlszeilenargumente mit Argparse.
  5. Das optionale Objekt verfügt über eine Methode zum Abrufen des Werts aus dem von Arguparse generierten Ergebnis. Beispiel: Importieren Sie mit so etwas wie "opt.import_opt (options)".

Implementierungsbeispiel

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))

Hauptunterschiede zu Ruby-Version

  1. Im Gegensatz zu Ruby hat Python einen Typ "bool", sodass die Typbestimmung relativ einfach integriert werden kann ("import_attr").
  2. Im Fall von Python wird Arrgparse für die Optionsanalyse verwendet, sodass die Methoden für die JSON-Analyse und die Argumentanalyse nicht einheitlich sind. Leicht überflüssig.
  3. Im Fall von Python scheint es ein wenig schwierig zu sein, das Attribut schreibgeschützt zu machen, daher habe ich es weggelassen.

Recommended Posts

Rufen Sie Optionen in Python sowohl aus JSON-Dateien als auch aus Befehlszeilenargumenten ab
Lesen und schreiben Sie JSON-Dateien mit Python
Zerlegen Sie Befehlsargumente in einer Zeile in Python
So erhalten Sie eine Zeichenfolge aus einem Befehlszeilenargument in Python
Lesen und Schreiben von CSV- und JSON-Dateien mit Python
Laden Sie den Befehl von yml mit Python und führen Sie ihn aus
Holen Sie sich die Datei, Funktion, Zeilennummer in Python ausgeführt
Holen Sie sich Dateien von Linux mit paramiko und scp [Python]
[Python] Befehlszeilenargumente aus Dateiname oder Standard lesen
Bearbeiten Sie Dateien und Ordner in Python
Lesen und verwenden Sie Python-Dateien aus Python
Umgang mit JSON-Dateien in Python
Exportieren und Ausgeben von Dateien in Python
Extrahieren Sie mit Python Zeichenfolgen aus Dateien
Python Hinweis: Stellen Sie fest, ob das Befehlszeilenargument in der Liste enthalten ist
Erhalten Sie Wechselkurse von offenen Wechselkursen in Python
Gefaltetes Liniendiagramm und Skalierungslinie in Python
Lesen und Schreiben von JSON-Dateien mit Python
Holen Sie sich den Batteriestand von SwitchBot mit Python
Holen Sie sich mit Python die Niederschlagswahrscheinlichkeit aus XML
Abrufen des Metrikverlaufs von MLflow in Python
Lesen aus Textdateien und SQLite mit Python (+ Pandas), R, Julia (+ DataFrames)
Holen Sie sich mit Python Zeitreihendaten von k-db.com
Vorlage zum Erstellen von Befehlszeilenanwendungen in Python
[Python] Holen Sie sich die Dateien mit Python in den Ordner
Studie aus Python Lesen und Schreiben von Hour9-Dateien
So erhalten Sie die Dateien im Ordner [Python]
[Einführung in Udemy Python3 + Application] 67. Befehlszeilenargumente
POST JSON mit Python und empfange mit PHP
Ich möchte den Dateinamen, die Zeilennummer und den Funktionsnamen in Python 3.4 erhalten
Holen Sie sich nur Artikel von Webseiten in Python
Übergeben von Argumenten beim Aufrufen von Python-Skripten über Blender in der Befehlszeile
python2 series / 3 series, Zeichencode und print-Anweisung / Befehlszeile
Geben Sie in Python einen Unterbefehl als Befehlszeilenargument an
Schließen Sie externe Kv-Dateien in Python Kivy ein und verwenden Sie sie
Holen Sie sich mit Python Daten vom GPS-Modul mit 10 Hz
So laden Sie Dateien von Selenium of Python in Chrome herunter
Importieren Sie Klassen in JAR-Dateien direkt aus dem Python-Skript
Rufen Sie die aktuellen Standortinformationen und den Benutzeragenten in Python ab
Gegenseitige Konvertierung zwischen JSON und YAML / TOML in Python
Erhalten Sie E-Mails von Google Mail und beschriften Sie sie mit Python3
Holen Sie sich Aktienkurse und erstellen Sie mit Python Kerzendiagramme
Suchen Sie rekursiv nach Dateien und Verzeichnissen in Python und geben Sie sie aus
Umgang mit Json in Python
Führen Sie Befehle aus Python aus
Holen Sie sich Datum in Python
Führen Sie den Befehl von Python aus
Informationen wie die GPU-Nutzung von Python abrufen (Befehl nvidia-smi)
Vergleichen Sie HTTP GET / POST mit cURL (Befehl) und Python (Programmierung).
Ermöglichen Sie die Installation von in Python erstellten Befehlszeilentools
Holen Sie sich Ihre Herzfrequenz von der Fitbit-API in Python!
Suchen Sie unter Linux über die Befehlszeile nach großen Dateien
Holen Sie sich den MIME-Typ in Python und bestimmen Sie das Dateiformat
Rufen Sie den Wert ab, während Sie den Standardwert aus dict in Python angeben
So geben Sie Befehlszeilenargumente beim Debuggen mit PyCharm an
Erlauben Sie Python, die Zeichenfolge der Eingabedatei aus dem Ordner auszuwählen
Holen Sie sich das aktuelle Datum und die aktuelle Uhrzeit in Python unter Berücksichtigung des Zeitunterschieds
Drücken Sie in Python auf REST, um Daten von New Relic abzurufen
Prognostizieren Sie das Geschlecht anhand des Namens mithilfe der Gender-API und von Pykakasi in Python
Ruft Makrokonstanten aus der C (++) - Headerdatei (.h) in Python ab