example argumentparser argument arg_parser add_argument python file parsing arguments argparse

arg_parser - python argparse argumentparser()



Varios archivos para un argumento en argparse Python 2.7 (2)

Si su objetivo es leer uno o más archivos legibles, puede intentar esto:

parser.add_argument(''file'', type=argparse.FileType(''r''), nargs=''+'')

nargs=''+'' reúne todos los argumentos de línea de comando en una lista. También debe haber uno o más argumentos o se generará un mensaje de error.

type=argparse.FileType(''r'') intenta abrir cada argumento como un archivo para leer. Se generará un mensaje de error si argparse no puede abrir el archivo. Puede usar esto para verificar si el argumento es un archivo válido y legible.

Alternativamente, si su objetivo es leer cero o más archivos legibles, simplemente puede reemplazar nargs=''+'' con nargs=''*'' . Esto le dará una lista vacía si no se proporcionan argumentos de línea de comando. Quizás desee abrir la entrada estándar si no se le asigna ningún archivo; si es así, simplemente agregue default=[sys.stdin] como parámetro para add_argument .

Y luego para procesar los archivos en la lista:

args = parser.parse_args() for f in args.file: for line in f: # process file...

Más sobre nargs: https://docs.python.org/2/library/argparse.html#nargs

Más sobre el tipo: https://docs.python.org/2/library/argparse.html#type

Tratando de hacer un argumento en argparse donde se pueden ingresar varios nombres de archivos que se pueden leer. En este ejemplo, solo intento imprimir cada uno de los objetos de archivo para asegurarme de que funciona correctamente, pero me aparece el error:

error: unrecognized arguments: f2.txt f3.txt

. ¿Cómo puedo conseguir que los reconozca a todos?

Mi comando en la terminal para ejecutar un programa y leer múltiples archivos

python program.py f1.txt f2.txt f3.txt

Script en Python

import argparse def main(): parser = argparse.ArgumentParser() parser.add_argument(''file'', nargs=''?'', type=file) args = parser.parse_args() for f in args.file: print f if __name__ == ''__main__'': main()

Utilicé nargs=''?'' b / c Quiero que sea cualquier número de archivos que puedan usarse. Si cambio add_argument a:

parser.add_argument(''file'', nargs=3)

luego puedo imprimirlos como cadenas pero no puedo hacer que funcione con ''?''


Solo tenía que asegurarse de que había al menos un argumento

parser.add_argument(''file'',nargs=''*'')