web-dev-qa-db-fra.com

chemin vers un répertoire comme argument argparse

Problème: je veux écrire le chemin d'un répertoire comme entrée d'utilisateur dans un add.argument De ArgumentParser().

Jusqu'à présent: j'ai écrit ceci

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('path', option = os.chdir(input("paste here path to biog.txt file:")), help= 'paste path to biog.txt file')

Des idées, quelle serait la solution idéale à ce problème?

11
user3698773

On peut s'assurer que le chemin est un répertoire valide avec quelque chose comme:

import argparse, os

def dir_path(string):
    if os.path.isdir(string):
        return string
    else:
        raise NotADirectoryError(string)

parser = argparse.ArgumentParser()
parser.add_argument('--path', type=dir_path)

# ...

La vérification est possible pour les fichiers utilisant os.path.isfile() à la place, ou l'un des deux en utilisant os.path.exists().

12
Joseph Marinier

Argument Parser (argparse) Exemples: Différents types d'arguments avec des gestionnaires personnalisés ajoutés. Pour CHEMIN vous pouvez passer "- chemin" suivi de la valeur du chemin comme argument

import os
import argparse
from datetime import datetime


def parse_arguments():
    parser = argparse.ArgumentParser(description='Process command line arguments.')
    parser.add_argument('-path', type=dir_path)
    parser.add_argument('-e', '--yearly', nargs = '*', help='yearly date', type=date_year)
    parser.add_argument('-a', '--monthly', nargs = '*',help='monthly date', type=date_month)

    return parser.parse_args()


def dir_path(path):
    if os.path.isdir(path):
        return path
    else:
        raise argparse.ArgumentTypeError(f"readable_dir:{path} is not a valid path")


def date_year(date):
    if not date:
        return

    try:
        return datetime.strptime(date, '%Y')
    except ValueError:
        raise argparse.ArgumentTypeError(f"Given Date({date}) not valid")


def date_month(date):
    if not date:
        return

    try:
        return datetime.strptime(date, '%Y/%m')
    except ValueError:
        raise argparse.ArgumentTypeError(f"Given Date({date}) not valid")


def main():
    parsed_args = parse_arguments()

if __name__ == "__main__":
main()
9
Asad Manzoor

Vous pouvez utiliser quelque chose comme:

import argparse, os

parser = argparse.ArgumentParser()
parser.add_argument('--path', help= 'paste path to biog.txt file')
args = parser.parse_args()


os.chdir(args.path) # to change directory to argument passed for '--path'

print os.getcwd()

Passez le chemin du répertoire comme argument à --path lors de l'exécution de votre script. Vérifiez également le document officiel pour une utilisation correcte de argparse: https://docs.python.org/2/howto/argparse.html

4
Abhishek Balaji R