Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: blozzter en Agosto 25, 2011, 05:49:12 PM

Título: [SOLUCIONADO] Regexp y modificación de ficheros
Publicado por: blozzter en Agosto 25, 2011, 05:49:12 PM
buenas, necesito hacer lo siguente:
diseñar una función que reciba como parámetro un nick, que busque una lista que contendrá los nicks de los admins en fichero y modifique dicha lista agregando el nick recibido.

tengo mas o menos la idea, pero creo que tengo un problema al momento de buscar la lista con los admins en el archivo.

el archivo de configuracion se llama config.py y contiene algo como:


servidor = ""
admins = ["blozzter"]
bla bla
...


y el codigo en python es:

Código (python) [Seleccionar]
import re

def agregar_admin(NuevoAdmin):
    fichero = open("config.py", "r") #fichero de configuracion
    contenido = fichero.read()
    fichero.close()
    admins_originales = re.findall("admins = (.*)", contenido)[0]  #creo que el error esta entre esta
    admins_nuevos = [admins_originales] + [NuevoAdmin]    #y esta linea
    contenido_modificado = contenido.replace(admins_originales, admins_nuevos)
    fichero = open("config.py", "w")
    fichero.writelines(contenido_modificado)
    fichero.close()
   
nick = "angelion"  #nick que se desea agregar al fichero de configuración
agregar_admin(nick)



saludos.
espero ayuda.
Título: Re:[duda] regexp y modificación de ficheros
Publicado por: horrorc0re en Agosto 27, 2011, 03:18:15 PM
Buenas blozzer!

prueba a cambiar esta linea:
Citar
admins_nuevos = [admins_originales] + [NuevoAdmin]    #y esta linea
contenido_modificado = contenido.replace(admins_originales, admins_nuevos)

por estas:
Citar
admins_nuevos = admins_nuevos[0].split(",")
admins_nuevos.append(NuevoUsuario)

De esta forma te separa los usuarios recogidos porque te los devuelve todo como una cadena y despues simplemente le añadimos a la lista el nuevo.

Estoy tambien liao con el :D pero tengo problemas al guardarlos. Como tu los guardas si te fijas te sustituye el contenido entero del fichero por lo que tengas, se carga el config.py  :o  ;D

Para guardarlos haria falta saber la linea donde esta y sustituirla entera, con el admin = tambien sino la segunda vez ya no funcá, xDD

Saludos!
Título: Re:[duda] regexp y modificación de ficheros
Publicado por: horrorc0re en Agosto 27, 2011, 04:11:33 PM
Buenas!

he conseguido guardar, modificando solo la linea de los admins, espero que te ayude.

Código (python) [Seleccionar]

#!/usr/bin/python

import re

def fAgregarNuevoAdmin(vNuevoAdmin):
try:
fichero = open("users",'r')
f = fichero.read()
usuarios = re.findall("admins = (.*)",f)

usuariosViejos = usuarios[0].split(", ") # partimos la cadena con los usuarios viejos para que se quede en una lista

cadenaNuevosUsuarios = "" # cadena que contendra todos los admins antiguos, mas el nuevo
cadenaViejosUsuarios = "" # cadena que contendra todos los admins antiguos

# Recorremos la lista de usuariosViejos para montar las cadenas, que despues nos haran falta en el replace
for i in range(len(usuariosViejos)):
if i+1 == len(usuariosViejos): # Controlamos que lo ultimo de la cadena no sea ", " Ejemplo : "['usuario1'], [usuario2], "
cadenaNuevosUsuarios = cadenaNuevosUsuarios + usuariosViejos[i]
cadenaViejosUsuarios = cadenaViejosUsuarios + usuariosViejos[i]
else:
cadenaNuevosUsuarios = cadenaNuevosUsuarios + usuariosViejos[i] + ", "
cadenaViejosUsuarios = cadenaViejosUsuarios + usuariosViejos[i] + ", "

cadenaNuevosUsuarios = cadenaNuevosUsuarios + ", " + vNuevoAdmin # Agregamos el nuevo usuario
f = f.replace(cadenaViejosUsuarios,cadenaNuevosUsuarios) # Reemplazamos la linea
fichero.close()

fichero = open("users",'w')
fichero.write(f) #Guardamos el fichero modificado
fichero.close()
except:
print 'ERROR'

fAgregarNuevoAdmin('[\'pepe\']');


Saludos
Título: Re:[duda] regexp y modificación de ficheros
Publicado por: blozzter en Agosto 27, 2011, 06:48:44 PM
gracias por la ayuda, horrorc0re.

había olvidado postear, pero recibí ayuda en el canal #python del mismo servidor de #underc0de.

el problema radicaba en que al recuperar la lista de usuarios la estaba rescatando como una cadena. la solución que me dieron fue usar json, quedando el código de la función así:

Código (python) [Seleccionar]

def agregar_admin(NuevoAdmin):
    fichero = open("config.py", "r") #fichero de configuracion
    contenido = fichero.read()
    fichero.close()
    admins_originales = re.findall("admins = (.*)", contenido)[0] 
    admins = json.loads(admins_originales)
    admins.append(NuevoAdmin)
    nuevo = json.dumps(admins)
    contenido_modificado = contenido.replace(admins_originales, nuevo)
    fichero = open("config.py", "w")
    fichero.writelines(contenido_modificado)
    fichero.close()



y con respecto a lo que dices:

CitarEstoy tambien liao con el  pero tengo problemas al guardarlos. Como tu los guardas si te fijas te sustituye el contenido entero del fichero por lo que tengas, se carga el config.py   


como yo lo guardo no me sustituye el fichero entero. el procedimiento es el siguiente:
- abro el archivo y almaceno TODO el contenido en la variable contenido.
- busco la lista de los admins que ya están en la configuración y lo almaceno en la variable admins_originales.
- creo una nueva variable llamada "nuevo" que contendrá los admins_originales + el admin nuevo
- remplazo en la variable 'contenido' la parte donde están los admins originales por "nuevo"
- vuelvo a crear el documento en blanco abriéndolo con permiso "w" e incerto la variable 'contenido'   :)

acá un articulo que describe el procedimiento: IR (http://www.davidricardo.com.mx/?p=455)

saludos
agradezco tu aporte, siempre es bueno ver más de una solución.
Título: Re:[duda] regexp y modificación de ficheros
Publicado por: horrorc0re en Agosto 27, 2011, 07:19:19 PM
cierto, me confundiria revisandolo xD, gracias a ti loko me ayudo a pasar la tarde jaja.

Saludos!