Recevoir le type de date (datetime) avec ArgumentParser [python]

introduction

Un rappel sur la façon de recevoir une valeur de type datetime.date comme argument facultatif en python.

Chose que tu veux faire

Spécifiez le type datetime avec ArgumentParser

Pour l'utilisation de base d'Argparse, Official Tutorial a été utile. Dans le didacticiel, le type int est spécifié, mais cette fois, je veux spécifier le type datetime.date.

Définissez une fonction date_type qui convertit une chaîne de date (par exemple 2020-01-01) en un objet de date et spécifiez-le dans le type ArgumentParser.

test.py


import argparse
import datetime

# str ->fonction de conversion de type de date
def date_type(date_str):
    return datetime.date.fromisoformat(date_str)

if __name__ == '__main__':
    #Obtenir ArgumentParser
    arg_parser = argparse.ArgumentParser()
    #Définition des options de spécification de date
    arg_parser.add_argument("-d", "--date",
                            help="Date must be in ISO format. For example: 2020-01-01.",
                            type=date_type)
    #Obtenir des arguments facultatifs
    args = arg_parser.parse_args()
    date = args.date

    print(date.year,date.month,date.day)

Résultat d'exécution

>python test.py -d 2020-01-01
2020 1 1

Personnalisez le message d'erreur

Dans le code ci-dessus, si l'argument facultatif est dans un format autre que le format de date ISO, l'erreur suivante sera générée.

>python test.py -d hoge
usage: mtg.py [-h] [-d DATE]
mtg.py: error: argument -d/--date: invalid date_type value: 'hoge'

Je n'aime pas que le nom de fonction défini date_type soit inclus dans le message d'erreur, alors personnalisez le contenu de l'erreur.

Modifiez la fonction de conversion de type date_type plus tôt comme suit.

def date_type(date_str):
    try:
        return datetime.date.fromisoformat(date_str)
    except ValueError as e:
        raise argparse.ArgumentTypeError(str(e) + " Date must be in ISO format. ex. 2020-01-01")

Try-except lève une nouvelle exception.

Le type d'exception à traiter (ValueError) a été réellement généré et confirmé.
>>> import datetime
>>> datetime.date.fromisoformat('hoge')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Invalid isoformat string: 'hoge'

Résultat d'exécution

>python test.py -d hoge
usage: test.py [-h] [-d DATE]
test.py: error: argument -d/--date: Invalid isoformat string: 'hoge' Date must be in ISO format. ex. 2020-01-01

en conclusion

Au début, j'ai cherché sur Google python argparser datetime, mais je n'ai pas trouvé de littérature japonaise parce que c'était trop coin de la boîte lourde, alors je l'ai écrit comme un article.

Les références

Tutoriel officiel Argparser: Tutoriel Argparse - Documentation Python 3.8.2

J'ai également fait référence à l'article de @ kzkadc: bow: [Un bref résumé de l'utilisation d'ArgumentParser --Qiita](https://qiita.com/kzkadc/items/e4fc7bc9c003de1eb6d0#%E5%9E%8B%E6%8C%87%E5%AE%9A%E3%81% 97% E3% 81% 9F% E3% 81% 84)

Documentation officielle [argparse \ - \ - \ - option de ligne de commande, argument, analyseur de sous-commande - documentation Python 3 \ .8 \ .2](https://docs.python.org/en/3/library/argparse.html# type)

Recommended Posts

Recevoir le type de date (datetime) avec ArgumentParser [python]
Obtenez date avec python
Extraire "date actuelle uniquement" et "date et heure actuelles" avec python datetime.
0 Convertir une date non remplie en type datetime avec une expression régulière
python> datetime> De la chaîne de date (format ISO: 2015-12-09 12:40:08) au type datetime
Scikit-learn DecisionTreeClassifier avec des valeurs de type datetime
Comment calculer la date avec python
Maîtriser le type avec Python [compatible Python 3.9]
Conversion de la chaîne <-> date (date, datetime) en Python
Recevoir des données textuelles de mysql avec python
[Python] Vérification simple du type d'argument avec la classe de données
POSTER diversement avec Python et recevoir avec Flask
FizzBuzz en Python3
Grattage avec Python
Arithmétique des dates Python
[Python] Créer une liste de date et d'heure (type datetime) pour une certaine période
Type numérique Python
Convertir le «nombre» de date Excel en date / heure Python
Statistiques avec python
Grattage avec Python
Python avec Go
Intégrer avec Python
Convertir les valeurs d'époque Windows à ce jour avec python
Vérifiez la date du devoir de drapeau avec Python
AES256 avec python
Testé avec Python
python commence par ()
avec syntaxe (Python)
[Python3] Lecture et écriture avec isoformat datetime avec json
Bingo avec python
Zundokokiyoshi avec python
Type de chaîne Python2
Python # type de chaîne
Comment gérer le type datetime dans sqlite3 de python
[Python] Type de classe et utilisation du module datetime
[Python] Déterminez le type d'iris avec SVM
[Python] Comment comparer la date / heure avec le fuseau horaire ajouté
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
[Python] Convertit l'affichage de l'heure (type str) en utilisant "" "et" '"en secondes (type float) avec datetime et timedelta
Simulez une bonne date de Noël avec un modèle optimisé Python
[python] Créez un tableau de dates avec des incréments arbitraires avec np.arange
Trouvez la date de cette semaine dans n'importe quel format avec python
Récapitulatif du traitement de la date en Python (datetime et dateutil)
Communication série avec Python
Zip, décompressez avec python
Jugement des nombres premiers avec Python
Python avec eclipse + PyDev.
Communication de socket avec Python
Analyse de données avec python 2
Grattage en Python (préparation)
Essayez de gratter avec Python.
Recherche séquentielle avec Python
"Orienté objet" appris avec python
Exécutez Python avec VBA
Résolvez AtCoder 167 avec python
Communication série avec python
[Python] Utiliser JSON avec Python
Apprenez Python avec ChemTHEATER
Exécutez prepDE.py avec python3