Python - separar una lista por lineas al guardarlo en un archivo de texto

   
Vista:

separar una lista por lineas al guardarlo en un archivo de texto

Publicado por MatiasSF (6 intervenciones) el 17/06/2017 23:28:42
Hola, tengo este problema para un trabajo en la universidad y la verdad no se como solucionarlo.
Al momento de ingresar una lista con los datos que entregue por teclado en un archivo de texto, me queda todo en una sola linea del archivo. Para avanzar en el trabajo debo tener varias lineas y francamente no consigo hacerlo.
el archivo(A.txt) queda asi: (dato1, dato2, dato3,....etc) en una sola linea.
Desearia dejarlo asi:
(dato1,
dato2,
dato3) cada dato en una linea diferente del archivo.

1
2
3
4
5
6
7
8
9
10
11
12
listavend=[]
listavend.append((a,b,c,d,e,g,h,i))
 
#print listavend
 
datosvend=open("A.txt","w")
datosvend.write(str(listavend))
datosvend.close()
 
datosvend=open("A.txt","r")
perro=datosvend.read()
print perro

los datos(a,b,c,d,e,f,g,h,i) los definí anteriormente, quiza no deberia dejarlos en una lista?
Tal vez sea algo sencillo, pero francamente me cuesta un poco esto, gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip

separar una lista por lineas al guardarlo en un archivo de texto

Publicado por kip (220 intervenciones) el 18/06/2017 01:05:33
Hola, lo que sucede es que no le das el salto de linea respectivo a los datos para que puedan guardarse asi en el archivo que deseas.

Tengo una duda, veo que tienes una lista y a esa lista le agregas una tupla, quieres que cada elemento de la tupla tenga un salto de linea o que cada tupla en la lista tenga un salto de linea ?

Por ejemplo:

1
2
3
4
listavend = []
listavend.append(('a', 'b', 'c'))
listavend.append(('AA', 'BB', 'CC'))
print('\n'.join(list(map('\n'.join, listavend))))

Te va a mostrar:
1
2
3
4
5
6
a
b
c
AA
BB
CC

Es decir, cada dato tiene su salto de linea respectivo, pero tambien podria ser asi:

1
2
3
4
listavend = []
listavend.append(('a', 'b', 'c'))
listavend.append(('AA', 'BB', 'CC'))
print('\n'.join(list(map(', '.join, listavend))))

1
2
a, b, c
AA, BB, CC

Cual es el que se ajusta mas a lo que necesitas ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

separar una lista por lineas al guardarlo en un archivo de texto

Publicado por matias (6 intervenciones) el 18/06/2017 01:29:29
Oh muchas gracias, ciertamente ambas podrian funcionar, sin embargo, al momento de reemplazar a por 'a', esta pierde su valor. Existe alguna manera de que no suceda eso? gracias por responder. por cierto, si quiza puedas ayudarme....

Mi codigo continua asi:
1
2
3
4
5
6
7
8
9
10
11
print listavend
 
datosvend=open("A.txt","w")
datosvend.write(listavend )
 
 
datosvend.close()
 
datosvend=open("A.txt","r")
perro=datosvend.read()
print perro

El problema es que quiero que al sobrescribir el archivo se guarde debajo de lo que ya tenia sin borrar lo anterior. he intentado con:
w+/h, pero al parecer no lo se ubicar bien. me salen diferentes tipos de errores al variar su uso.

Bueno gracias por tu ayuda, si no me puedes seguir ayudando no hay problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip

separar una lista por lineas al guardarlo en un archivo de texto

Publicado por kip (220 intervenciones) el 18/06/2017 01:42:55
Yo coloque 'a', 'b'... simplemente como un valor de ejemplo, si lo tuyo son variables debes dejarla tal como estan.

Para no sobreescribir debes enviar como parametro de modo de archivo 'a' en lugar de 'w':

1
datosvend=open("A.txt","a")

Intentalo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

separar una lista por lineas al guardarlo en un archivo de texto

Publicado por matias (6 intervenciones) el 18/06/2017 02:00:36
oh gracias me funciono lo del(A.txt", "a") y no w.
pero con a y 'a' que te mencione antes, ya lo habia probado y me salia un error. quiza fue porque modifique la tupla por muchos append y eso altero el codigo que me diste al principio con join y map.
me salio este error cuando use print ahora.

Traceback (most recent call last):
File "C:\Users\Matias\Desktop\proyecto.py", line 54, in <module>
print('\n'.join(list(map('\n'.join, listavend))))
TypeError: can only join an iterable

Aun asi no creo que lo necesite por ahora, me has ayudado un monton. muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip

separar una lista por lineas al guardarlo en un archivo de texto

Publicado por kip (220 intervenciones) el 18/06/2017 02:03:35
Puedes colocar tu codigo completo ? Aquel error es raro, quizas estes estructurando mal el valor que añades a la lista!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

separar una lista por lineas al guardarlo en un archivo de texto

Publicado por matias (6 intervenciones) el 18/06/2017 02:16:48
claro, te explico, quiza asi incluso me sirva mas. Podrias ignorar la parte de ingresar desde a hasta i al comienzo porque me parece que esta bien.
Hasta ahora me funciona, sin embargo al reescribir o añadir datos el archivo, me quedan en la misma linea de texto.
mi idea era ordenar un poco como quedaria en el archivo de texto, y creo que ahi comenzó todo
ejemplo:
(19999, matias, 3300, 4000, 32,a,1) (200, pedro, 400, 23, v,2)
e intento que quede asi:

(19999, matias, 3300, 4000, 32,a,1)
(200, pedro, 4000, 2300, 20 v,2)

ahora los codigos que estoy usando:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
a= raw_input("ingrese rut: \n")
b= raw_input("ingrese nombre: \n")
c= int(input("ingrese sueldo base: \n"))
 
while c<200000 or c>250000:
    c=int(input("ingrese un sueldo base entre 200000 y 250000\n"))
 
d= int(input("ingrese monto de venta:\n"))
 
#Calculo bono
if d<= 499999:
    e = 0
    print "bono de venta es de:\n", e
elif d>=500000 and d<=1000000:
    e = 15000
    print "bono de venta es de:\n", e
elif d>=1000001:
    e = 30000
    print "bono de venta es de:\n", e
 
#calculo comision#
f= ((d*5)/100)
print "la comision es de:\n", f
 
g= c+d+f
print "el sueldo bruto es de:\n", g
 
h=int(input("ingrese el numero del mes: \n"))
while h<1 or h>12:
    h= int(input("ingrese un numero entre 1 y 12: \n"))
    print h
 
i= raw_input("ingrese el estado: a(Activo) o v(vacaciones): \n")
while i != "a" and i != "v":
    i= raw_input("ingrse el estado: a(Activo) o v(vacaciones): \n")
    print i
 
 
 
listavend=[]
listavend.append(a)
listavend.append(b)
listavend.append(c)
listavend.append(d)
listavend.append(e)
listavend.append(f)
listavend.append(g)
listavend.append(h)
listavend.append(i)
 
 
print listavend
 
datosvend=open("A.txt","a")
datosvend.write(str(listavend ))
 
 
datosvend.close()
 
datosvend=open("A.txt","r")
perro=datosvend.read()
print perro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip

separar una lista por lineas al guardarlo en un archivo de texto

Publicado por kip (220 intervenciones) el 18/06/2017 02:25:14
Entiendo, intentalo asi:

1
2
datosvend=open("A.txt","a")
datosvend.write('%s\n' % ', '.join(listavend))

Te funciona ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

separar una lista por lineas al guardarlo en un archivo de texto

Publicado por matias (6 intervenciones) el 18/06/2017 02:30:01
Mmm no, la verdad no. me sale esto. Estoy usando la version2.7, quiza afecte?

Traceback (most recent call last):
File "C:\Users\Matias\Desktop\proyecto.py", line 57, in <module>
datosvend.write('%s\n' % ', '.join(listavend))
TypeError: sequence item 2: expected string, int found
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip

separar una lista por lineas al guardarlo en un archivo de texto

Publicado por kip (220 intervenciones) el 18/06/2017 02:42:48
No me di cuenta que tienes datos enteros, eso se soluciona convirtiendo todos los datos de la lista a cadenas para que join() no tenga problemas:

1
2
datosvend=open("A.txt","a")
datosvend.write('%s\n' % ', '.join(map(str, listavend)))

O asi:
1
2
datosvend=open("A.txt","a")
datosvend.write('%s\n' % ', '.join([str(val) for val in listavend]))
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

separar una lista por lineas al guardarlo en un archivo de texto

Publicado por matias (6 intervenciones) el 18/06/2017 03:10:43
Muchisimas gracias! ahora si me funciono. te podria molestar con una cosa mas? no estoy muy seguro de como funciona ese ultimo codigo y cuando deberia aplicarlo. muchas gracias de verdad!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad