Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Panic0 en 30 Enero 2021, 22:27 pm



Título: Saben como puedo quitarle esto?
Publicado por: Panic0 en 30 Enero 2021, 22:27 pm
Hola,estoy haciendo un sistema de registro de usuarios,y todo funciona perfecto...Pero tengo un pequeño problema

Resulta que después de que se crea un nuevo usuario y se guarda dentro de un archivo,al final de la linea queda un espacio.

Y lo que quiero y estoy tratando de hacer que no salga eso.

Hasta ahora tengo esto
Código:
def nueva_clave(nombre_archivo_txt):
    archivo_txt = open(nombre_archivo_txt, 'r')
    lineas_del_archivo = archivo_txt.readlines()
    total_clientes = len(lineas_del_archivo)
    if total_clientes > 0:
        for linea in range(total_clientes):
            el_cleinte = lineas_del_archivo[linea]
            cliente_leido = el_cleinte.split(' ')

        ultima_clave  = cliente_leido[0]
        ultima_clave  = int(ultima_clave) + 1
        ultima_clave  = str(ultima_clave)
        archivo_txt.close()
        return ultima_clave
    else:
        return '1'


def cliente(nombre_archivo_txt):
    cliente = []
    numero_cliente = nueva_clave(nombre_archivo_txt)
    while True:
        agregar = input(f'Numero de cliente actual {int(numero_cliente) - 1} Agrega uno nuevo (s/n) ? ): ')
        if agregar.lower() == 'n':
            break
        elif agregar.lower() == "s":
            archivo_txt = open(nombre_archivo_txt,"a")
            print(f"Numero del nuevo cliente {int(numero_cliente)}")
            apellido_cliente =  input("Ingrese el apellido del cliente: ")
            nombre_cliente   =  input("Ingrese el nombre del cliente: ")
            direccion        =  input("Ingrese la direccion: ")
            saldo            =  input("Ingrese su saldo (ej:1.500): ")

            apellido_cliente = apellido_cliente.strip(" ")
            nombre_cliente = nombre_cliente.strip(" ")
            direccion = direccion.strip(" ")
            
            cliente.append(numero_cliente)
            cliente.append(apellido_cliente)
            cliente.append(nombre_cliente)
            cliente.append(direccion)
            cliente.append(saldo)



            saldo = str(saldo)

            for data in cliente:
                archivo_txt.write(data+" ")

            cliente[3] = float(saldo)

            archivo_txt.write('\n')
          
            cliente = []
            archivo_txt.close()
            

if __name__ == "__main__":
    nombre_archivo_txt = "prueba.txt"
    cliente(nombre_archivo_txt)

Esto dentro del archivo crea algo como esto:
1 lopez juan FairFax 1.900 (Y al final (en el saldo) le hace un espacio)


Si me pueden dar una mano seria uf genial.  :-*


Título: Re: Saben como puedo quitarle esto?
Publicado por: tincopasan en 31 Enero 2021, 00:40 am
¿es un chiste? si vos lo estás generando con el código:
Código
  1. archivo_txt.write(data + " ")

hay muchas formas de solucionar esto, una fácil sin cambiar tu lógica de programación sería:

Código
  1. for data in cliente:
  2.                if cliente.index(data) != len(cliente)-1:
  3.                    archivo_txt.write(data + " ")
  4.                else:
  5.                    archivo_txt.write(data)
  6.  
  7.  

el tema parece ser que no estás entendiendo lo que estás haciendo.


Título: Re: Saben como puedo quitarle esto?
Publicado por: Panic0 en 31 Enero 2021, 02:18 am
¿es un chiste? si vos lo estás generando con el código:
Código
  1. archivo_txt.write(data + " ")

hay muchas formas de solucionar esto, una fácil sin cambiar tu lógica de programación sería:

Código
  1. for data in cliente:
  2.                if cliente.index(data) != len(cliente)-1:
  3.                    archivo_txt.write(data + " ")
  4.                else:
  5.                    archivo_txt.write(data)
  6.  
  7.  

el tema parece ser que no estás entendiendo lo que estás haciendo.

Noup,eso no lo genera,por que tenía otro codigo exactamente igual y ese espacio simplemente no se genera... ;)

Citar
¿es un chiste? si vos lo estás generando con el código:
Código
  1. archivo_txt.write(data + " ")

En cuanto a tu code,lo voy a probar

Gracias por la respuesta amigo ;)

Pd:y si,entiendo perfectamente lo que estaba haciendo lmao  :xD  :laugh: :laugh:


Título: Re: Saben como puedo quitarle esto?
Publicado por: tincopasan en 31 Enero 2021, 03:03 am
Citar
Noup,eso no lo genera,por que tenía otro codigo exactamente igual y ese espacio simplemente no se genera... ;)

1)ahhh mira vos, ponele una a, algo así:
Código
  1. archivo_txt.write(data + " a")

y después contame que no es esa línea lo que genera los espacios


Título: Re: Saben como puedo quitarle esto?
Publicado por: Panic0 en 31 Enero 2021, 04:06 am
1)ahhh mira vos, ponele una a, algo así:
Código
  1. archivo_txt.write(data + " a")

y después contame que no es esa línea lo que genera los espacios

Creo que esto me define  "No existen las preguntas tontas, solo las personas tontas"

En fin,tenías razón,perdón por no llevarte la palabra ;(


Título: Re: Saben como puedo quitarle esto?
Publicado por: Panic0 en 31 Enero 2021, 04:59 am
¿es un chiste? si vos lo estás generando con el código:
Código
  1. archivo_txt.write(data + " ")

hay muchas formas de solucionar esto, una fácil sin cambiar tu lógica de programación sería:

Código
  1. for data in cliente:
  2.                if cliente.index(data) != len(cliente)-1:
  3.                    archivo_txt.write(data + " ")
  4.                else:
  5.                    archivo_txt.write(data)
  6.  
  7.  

el tema parece ser que no estás entendiendo lo que estás haciendo.

Dude,eso si,existe la posibilidad de que me puedas explicar mas a detalle que es lo que hace cada una de estas cosas?

Tengo entendido que el index te tira la primera posición de algo en una lista
pero por que como argumento "data"?

Despues el len devuelve la longitud de un string o tambien el número de elementos de una lista.

Y por que + 1¿¿¿???

Código
  1. for data in cliente:
  2.                if cliente.index(data) != len(cliente)-1:
  3.                    archivo_txt.write(data + " ")
  4.                else:
  5.                    archivo_txt.write(data)
  6.  
  7.  


Título: Re: Saben como puedo quitarle esto?
Publicado por: tincopasan en 31 Enero 2021, 07:17 am
Citar
Tengo entendido que el index te tira la primera posición de algo en una lista

en listas, tuplas y cadenas
ejemplos de index:

Código
  1. a = (1,2,3,4) #tupla
  2. b = "cadena"  #cadena
  3. print(a.index(3))
  4. print(b.index("n"))    
  5.  

omití listas por ser más que obvia.

Citar
pero por que como argumento "data"?

porque como está expresado en el ejemplo es obligatorio pasarle un elemento que se encuentre en la lista.

Código
  1. a=(1,2,3,4)
  2. print(a.index(5))

dará un error ya que 5 no está en la lista, en este caso data está en la lista.

Citar
Despues el len devuelve la longitud de un string o tambien el número de elementos de una lista.

len devuelve el largo de un objeto, sea este una sequencia o una colección, por lo tanto:
cadenas,tuplas,listas,diccionarios pueden ser pasados como objetos

Código
  1. c= {1:"uno",2:"dos"}
  2. print(len(c))
etc.

Citar
Y por que + 1¿¿¿???

no es "+" es "-"

tu lista es de 5 elementos:
[1,2,3,4,5]   
len devolverá 5 pero mientras sea distinta de  4 (5 -1) hará algo y cuando sea mayor otra cosa

a pesar de lo que muchos se esfuerzan en repetir la documentación de python es extensa, solo hay que leerla.




Título: Re: Saben como puedo quitarle esto?
Publicado por: Panic0 en 31 Enero 2021, 08:05 am
en listas, tuplas y cadenas
ejemplos de index:

Código
  1. a = (1,2,3,4) #tupla
  2. b = "cadena"  #cadena
  3. print(a.index(3))
  4. print(b.index("n"))    
  5.  

omití listas por ser más que obvia.

porque como está expresado en el ejemplo es obligatorio pasarle un elemento que se encuentre en la lista.

Código
  1. a=(1,2,3,4)
  2. print(a.index(5))

dará un error ya que 5 no está en la lista, en este caso data está en la lista.

len devuelve el largo de un objeto, sea este una sequencia o una colección, por lo tanto:
cadenas,tuplas,listas,diccionarios pueden ser pasados como objetos

Código
  1. c= {1:"uno",2:"dos"}
  2. print(len(c))
etc.

no es "+" es "-"

tu lista es de 5 elementos:
[1,2,3,4,5]   
len devolverá 5 pero mientras sea distinta de  4 (5 -1) hará algo y cuando sea mayor otra cosa

a pesar de lo que muchos se esfuerzan en repetir la documentación de python es extensa, solo hay que leerla.




Muy bien explicado,te tengo que dar un enorme gracias por tomarte tu tiempo de responder,ya que seguro tenes cosas mas importantes que hacer en vez de estar respondiendo cosas de un chaval novato jajaja

En fin,que tengas un excelente día u noche  ;D