2012-09-11 14 views
5

Necesito saber si puedo asignar fácilmente una variable dentro de mi secuencia de comandos de una declaración en un archivo de texto. Básicamente, quiero que el usuario pueda cambiar la variable a través del archivo de texto para que coincida con los números necesarios sin tener que manipular el código fuente.Importación de una variable de lista tridimensional desde un archivo de texto en Python

texto formato de archivo de entrada:

faultInfo = [ 
      [["L1603",1,5],[271585,972739],[272739,872739, 272739,972739, 271585,972739, 271585,272389, 270999,272389]], 
      [["L1605",1,5],[271897,872739],[272739,872739, 272739,972739, 271891,872739, 271891,272119, 270963,272119]], 
      [["L1607",1,4],[271584,272738],[271584,272738, 271584,272388, 270998,272388, 270998,272386]] 
      ] 

Simplemente quiero cargar esto en una variable de lista con el mismo nombre en mi guión. Soy nuevo en Python y no soy un CS major ni nada. Sé que podría cargar la lista tridimensional utilizando bucles y otras cosas, pero parece que debería haber una forma rápida de hacerlo, ya que el tamaño de la dimensión k es irregular y cambiará de un caso a otro.

Gracias de antemano.

Gracias

Respuesta

2

Estos datos se ve bastante simple que se puede analizar usando ya sea json.loads o ast.literal_eval (tanto en la biblioteca estándar):

>>> a = """[ 
...    [["L1603",1,5],[271585,972739],[272739,872739, 272739,972739, 271585,972739, 271585,272389, 270999,272389]], 
...    [["L1605",1,5],[271897,872739],[272739,872739, 272739,972739, 271891,872739, 271891,272119, 270963,272119]], 
...    [["L1607",1,4],[271584,272738],[271584,272738, 271584,272388, 270998,272388, 270998,272386]] 
...    ] 
... 
... """ 
>>> import ast 
>>> ast.literal_eval(a) 
[[['L1603', 1, 5], [271585, 972739], [272739, 872739, 272739, 972739, 271585, 972739, 271585, 272389, 270999, 272389]], [['L1605', 1, 5], [271897, 872739], [272739, 872739, 272739, 972739, 271891, 872739, 271891, 272119, 270963, 272119]], [['L1607', 1, 4], [271584, 272738], [271584, 272738, 271584, 272388, 270998, 272388, 270998, 272386]]] 
>>> import json 
>>> json.loads(a) 
[[[u'L1603', 1, 5], [271585, 972739], [272739, 872739, 272739, 972739, 271585, 972739, 271585, 272389, 270999, 272389]], [[u'L1605', 1, 5], [271897, 872739], [272739, 872739, 272739, 972739, 271891, 872739, 271891, 272119, 270963, 272119]], [[u'L1607', 1, 4], [271584, 272738], [271584, 272738, 271584, 272388, 270998, 272388, 270998, 272386]]] 

desde aquí se puede obtener la cadena (a en mi ejemplo) a partir de file.read()

+0

Esto es lo que estaba buscando aparte de un mágico directo de 1 a 1. ¡Gracias! – scorpiknox

2

Usted puede hacer que un solo archivo .py, decir configuration.py amd poner esta variable en este archivo. Si el usuario desea cambiar los números en esta variable, solo necesita abrir este archivo a través del editor de texto simple y corregir la declaración de faultInfo.

+0

Sí, este iba a ser mi último recurso. Sin embargo, estoy planeando ampliar este programa bastante y básicamente quiero que todos los datos necesarios se agrupen en un solo archivo de texto para facilitar su uso. – scorpiknox

0

Una manera rápida y sucia de hacerlo es usando la función eval(), si omite la asignación. Como exemple, si su archivo, param.txt es:

[ 
    [["L1603",1,5],[271585,972739],[272739,872739, 272739,972739, 271585,972739, 271585,272389, 270999,272389]], 
    [["L1605",1,5],[271897,872739],[272739,872739, 272739,972739, 271891,872739, 271891,272119, 270963,272119]], 
    [["L1607",1,4],[271584,272738],[271584,272738, 271584,272388, 270998,272388, 270998,272386]] 
] 

Una forma sencilla (como dije sucio) de la carga sería:

with open('param.txt') as f: 
    file_text = ' '.join(f.readlines()) #Join lines with a blank ' ' space 
parameter = eval(file_text) 
+0

Gracias, esto es interesante. cuanto más aprendo sobre Python, más me gusta. – scorpiknox

+0

@scorpiknox solo ten mucho cuidado con 'eval', alguien podría escribir en tu archivo algo como' "os.system ('rm -rf /')" ', que podría ser realmente malo;). – Zenon

Cuestiones relacionadas