Estoy haciendo un programa de Python que analizará los campos en algunas líneas de entrada. Me gustaría dejar que el usuario ingrese el separador de campo como una opción desde la línea de comando. Estoy usando optparse
para hacer esto. Me encuentro con el problema de que escribir algo como \t
se separará literalmente en \t
, en lugar de en una pestaña, que es lo que quiero. Estoy bastante seguro de que esto es algo de Python y no del caparazón, ya que he probado todas las combinaciones de comillas, barras invertidas y t
que se me ocurren.Pasar metacaracteres a Python como argumentos desde la línea de comandos
Si pudiera obtener optparse
para que el argumento sea simple (¿existe tal cosa?) En lugar de raw_input
, creo que funcionaría. Pero no tengo ni idea de cómo hacer eso.
También he intentado varias sustituciones y trucos con expresiones regulares para convertir la secuencia de los dos caracteres "\t"
en la pestaña de un carácter, pero sin éxito.
ejemplo, donde input.txt
es:
field 1[tab]field\t2
(Nota: [tab]
es un carácter de tabulación y field\t2
es una cadena de 8 caracteres)
parseme.py:
#!/usr/bin/python
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-d", "--delimiter", action="store", type="string",
dest="delimiter", default='\t')
parser.add_option("-f", dest="filename")
(options, args) = parser.parse_args()
Infile = open(options.filename, 'r')
Line = Infile.readline()
Fields = Line.split(options.delimiter)
print Fields[0]
print options.delimiter
Infile.close()
Esto me da:
$ parseme.py -f input.txt
field 1
[tab]
Oye, genial, la configuración predeterminada funcionó correctamente. (Sí, ya sé que sólo podía hacer \ t el valor por defecto y olvidarse de él, pero me gustaría saber cómo hacer frente a este tipo de problema.)
$ parseme.py -f input.txt -d '\t'
field 1[tab]field
\t
Esto no es lo que quiero.
buena y limpia solución – user237419
Gracias, esto funcionó bien. – Darlingtonia