83 votes

Comment ouvrir un fichier en utilisant argparse ?

Je veux ouvrir un fichier pour le lire en utilisant argparse. Dans cmd, cela doit ressembler à : my_program.py /filepath

C'est ce que j'ai essayé de faire :

parser = argparse.ArgumentParser()
parser.add_argument('file', type = file)
args = parser.parse_args()

217voto

ilent2 Points 3946

Jetez un coup d'œil à la documentation : https://docs.python.org/3/library/argparse.html#type

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('file', type=argparse.FileType('r'))
args = parser.parse_args()

print(args.file.readlines())

91voto

wim Points 35274

Le type de l'argument doit être une chaîne de caractères (ce qui est de toute façon le cas par défaut). Il faut donc faire comme ceci :

parser = argparse.ArgumentParser()
parser.add_argument('filename')
args = parser.parse_args()
with open(args.filename) as file:
  # do stuff here

37voto

Ming Points 404

Pour que le fichier soit fermé de manière élégante, vous pouvez combiner argparse.FileType avec l'instruction "with".

# ....

parser.add_argument('file', type=argparse.FileType('r'))
args = parser.parse_args()

with args.file as file:
    print file.read()

--- mise à jour ---

Oh, @Wernight l'a déjà dit dans les commentaires

24voto

Thomas Ahle Points 10403

J'ajouterai simplement la possibilité d'utiliser pathlib :

import argparse, pathlib

parser = argparse.ArgumentParser()
parser.add_argument('file', type=pathlib.Path)
args = parser.parse_args()

with args.file.open('r') as file:
    print(file.read())

4voto

Joao Ventura Points 178

TL ; DR

parser.add_argument(
    '-f', '--file',
    help='JSON input file',
    type=argparse.FileType('r'),
)

Description

Simple ligne de commande script pour reformater les fichiers JSON

reformat-json \
    -f package.json \
    --indent=2 \
    --sort-keys \
    --output=sorted_package.json

peut être codée en Python comme suit

#!/usr/bin/env python3

import argparse, json, sys

EXIT_SUCCESS = 0
EXIT_FAILURE = 1

def main():
    parser = argparse.ArgumentParser()

    parser.add_argument(
        '-f', '--file',
        help='JSON input file',
        type=argparse.FileType('r'),
    )

    parser.add_argument(
        '-i', '--indent',
        help='Non-negative integer indent level',
        type=int
    )

    parser.add_argument(
        '-o', '--output',
        help='Write JSON into output file',
        type=argparse.FileType('w'),
    )

    parser.add_argument(
        '-s', '--sort-keys',
        action='store_true',
        help='Sort output JSON by keys',
    )

    args = parser.parse_args()

    if not args.file:
        parser.print_usage()
        return sys.exit(EXIT_FAILURE)

    gson = json.dumps(
        json.load(args.file),
        indent=args.indent,
        sort_keys=args.sort_keys
    )

    args.file.close()

    if args.output:
        args.output.write(gson)
        args.output.write('\n')
        args.output.close()
    else:
        print(gson)

    return sys.exit(EXIT_SUCCESS)

if __name__ == '__main__':
    main()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X