python - ejemplos - django
Iterar secciones en un archivo de configuraciĆ³n (2)
Recientemente fui presentado al configurador de biblioteca. Yo debería verificar si cada sección tiene al menos un valor booleano establecido en uno. Por ejemplo...
[Horizontal_Random_Readout_Size]
Small_Readout = 0
Medium_Readout = 0
Large_Readout = 0
Lo anterior causaría un error.
[Vertical_Random_Readout_Size]
Small_Readout = 0
Medium_Readout = 0
Large_Readout = 1
Lo anterior pasaría. Debajo hay un pseudo código de lo que tenía en mente ...
exit_test = False
for sections in config_file:
section_check = False
for name in parser.options(section):
if parser.getboolean(section, name):
section_check = True
if not section_check:
print "ERROR:Please specify a setting in {} section of the config file".format(section)
exit_test = True
if exit_test:
exit(1)
Preguntas:
1) ¿Cómo realizo el primer ciclo for para iterar sobre las secciones del archivo de configuración?
2) ¿Es esta una buena manera de hacer esto o hay una mejor manera? (Si no hay, responda la pregunta uno).
La mejor apuesta es cargar TODAS las líneas del archivo en algún tipo de matriz (voy a ignorar el problema de cuánta memoria podría usarse y si pasar página en su lugar).
Entonces, desde allí, usted sabe que las líneas que denotan encabezados siguen un formato determinado, por lo que puede iterar sobre su matriz para crear una matriz de objetos que contenga el nombre del encabezado; el índice de línea (referencia basada en cero a la matriz maestra) y si ese encabezado tiene un valor establecido.
Desde allí puede iterar sobre estos objetos en referencia cruzada a la matriz maestra, y para cada encabezado, verificar las siguientes líneas "n" (en la matriz maestra) entre el encabezado actual y el siguiente.
Llegados a este punto, se descuentan los valores de configuración individuales para ese encabezado, por lo que debería poder analizar fácilmente la línea y detectar un valor, con lo cual puede salirse del ciclo si es verdadero o, para mayor solidez, emitir un control de exclusividad valores del encabezado para asegurar que SOLO se establezca un valor.
Con este enfoque, tiene acceso a todas las líneas, con un objeto por encabezado, para que su código siga siendo flexible y funcional. Optimizar luego
Espero que tenga sentido y sea útil.
Usando ConfigParser
tienes que analizar tu configuración.
Después del análisis obtendrás todas las secciones usando el método .sections()
.
Puede iterar sobre cada sección y usar .items()
para obtener todos los pares clave / valor de cada sección.
for each_section in conf.sections():
for (each_key, each_val) in conf.items(each_section):
print each_key
print each_val