[SOLUCIONADO] Regexp y modificación de ficheros

Iniciado por blozzter, Agosto 25, 2011, 05:49:12 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Agosto 25, 2011, 05:49:12 PM Ultima modificación: Febrero 09, 2015, 12:21:16 PM por Expermicid
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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta y contiene algo como:


Código: text
servidor = ""
admins = ["blozzter"]
bla bla
...


y el codigo en python es:

Código: python
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.
¡< blozzter >!

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!
Por cada error que se le atribuye a una PC siempre se encuentran al menos dos errores humanos: el de culpar a la PC y el de confiar en ella.

Buenas!

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

Código: python

#!/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
Por cada error que se le atribuye a una PC siempre se encuentran al menos dos errores humanos: el de culpar a la PC y el de confiar en ella.

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

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: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

saludos
agradezco tu aporte, siempre es bueno ver más de una solución.
¡< blozzter >!

cierto, me confundiria revisandolo xD, gracias a ti loko me ayudo a pasar la tarde jaja.

Saludos!
Por cada error que se le atribuye a una PC siempre se encuentran al menos dos errores humanos: el de culpar a la PC y el de confiar en ella.