Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Lectura de lineas alternadas de un archivo

Estas en el tema de Lectura de lineas alternadas de un archivo en el foro de Python en Foros del Web. Estoy aprendiendo un poco el tema de los archivos con python y me gustaria que alguien me orientara para la realización del siguiente problema: Tengo ...
  #1 (permalink)  
Antiguo 21/03/2014, 10:45
Avatar de Restart  
Fecha de Ingreso: marzo-2009
Mensajes: 84
Antigüedad: 15 años, 1 mes
Puntos: 0
Pregunta Lectura de lineas alternadas de un archivo

Estoy aprendiendo un poco el tema de los archivos con python y me gustaria que alguien me orientara para la realización del siguiente problema:

Tengo un archivo de texto text.txt el cual tiene como contenido:

linea_a
linea_b
linea_a2
linea_b2
linea_a3
linea_b3
...

y asi sucesivamente

lo que quiero hacer yo es leer el archivo text.txt leyendo lineas alternadas y creando dos ficheros, la idea es que queden dos archivos con los textos de esta forma:

text_a.txt con el contenido:

linea_a
linea_a2
linea_a3
...

text_b.txt con el contenido

linea_b
linea_b2
linea_b3
....


Espero se haya entendido la idea, saludos
  #2 (permalink)  
Antiguo 21/03/2014, 11:09
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Lectura de lineas alternadas de un archivo

Supongo que abrir el archivo y todo eso sabes hacerlo, asique me lo ahorro, te pongo el loop for a modo de ejemplo
Código:
x = 0
for linea in archivoInicial:
    if x == 0:
        archivo1.write(linea)
        x=1
    else:
        archivo2.write(linea)
        x = 0
Con la variable X vas alternando entre un archivo y otro, la sintaxis y eso no se si esta correcta lo he escrito al momento, espero que captes la idea.

Un saludo
  #3 (permalink)  
Antiguo 22/03/2014, 19:36
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Lectura de lineas alternadas de un archivo

Hola, no se realmente para que necesitás un código que haga eso, pero lo he hecho según entiendo tu post.
Este código creo que hace justamente lo que necesitás:


Código Python:
Ver original
  1. Archivo = open("text.txt", "r")
  2. Info = Archivo.read()
  3. Archivo.close()
  4.  
  5. class Escritura:
  6.     def __init__(self):
  7.         self.CuentaNums = 0
  8.         self.Lista = []
  9.         for Linea in Info.splitlines():
  10.             if Linea[6:7] not in self.Lista:
  11.                 self.Lista.append(Linea[6:7])
  12.         self.CrearArchivos()
  13.     def CrearArchivos(self):
  14.         if self.Lista != []:
  15.             Letra = self.Lista[0]
  16.             Archivo = open("text_" + Letra + ".txt", "w")
  17.             self.Lista.remove(Letra)
  18.             for Linea in Info.splitlines():
  19.                 if Linea[6:7] == Letra:
  20.                     Archivo.write(Linea + "\n")
  21.             Archivo.close()
  22.             self.CrearArchivos()
  23.         else:
  24.             print "Archivos creados con exito!!"
  25.             print "Presiona ENTER para cerrar la consola"
  26.  
  27. CrearArchivos = Escritura()
  28. CrearArchivos
  29.  
  30. raw_input()

El funcionamiento es practicamente simple, ejecutás el programa y el mismo te crea los archivos necesarios con el contenido de ellos.
Por ejemplo, en el archivo text.txt tenemos esto:

linea_a
linea_b
linea_a2
linea_b2
linea_a3
linea_b3
linea_c4
linea_f8
linea_a1

y el programa creará 4 archivos en formato .txt, el nombre de ellos será text_ y la letra que sigue del _ (guión bajo):

text_a.txt
text_b.txt
text_c.txt
text_f.txt

por ejemplo archivo text_a.txt contendría esto dentro de él:

linea_a
linea_a2
linea_a3
linea_a1

creo que eso es justamente lo que necesitás.
Te pregunté recién para que necesitarías un código así ya que este código no va a funcionar si le haces modificaciones al archivo text.txt, en realidad el código que te puse recién es sólo un ejemplo de cómo podrías hacer el script para lo que necesitás.
Que andés bien!! Suerte!

PD: Tanto el archivo del programa que te hice recién como el archivo text.txt deben estar en el mismo directorio/ruta.
  #4 (permalink)  
Antiguo 23/03/2014, 21:33
Avatar de Restart  
Fecha de Ingreso: marzo-2009
Mensajes: 84
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Lectura de lineas alternadas de un archivo

Cita:
Iniciado por Principe_Azul Ver Mensaje
Hola, no se realmente para que necesitás un código que haga eso, pero lo he hecho según entiendo tu post.
Este código creo que hace justamente lo que necesitás:


Código Python:
Ver original
  1. Archivo = open("text.txt", "r")
  2. Info = Archivo.read()
  3. Archivo.close()
  4.  
  5. class Escritura:
  6.     def __init__(self):
  7.         self.CuentaNums = 0
  8.         self.Lista = []
  9.         for Linea in Info.splitlines():
  10.             if Linea[6:7] not in self.Lista:
  11.                 self.Lista.append(Linea[6:7])
  12.         self.CrearArchivos()
  13.     def CrearArchivos(self):
  14.         if self.Lista != []:
  15.             Letra = self.Lista[0]
  16.             Archivo = open("text_" + Letra + ".txt", "w")
  17.             self.Lista.remove(Letra)
  18.             for Linea in Info.splitlines():
  19.                 if Linea[6:7] == Letra:
  20.                     Archivo.write(Linea + "\n")
  21.             Archivo.close()
  22.             self.CrearArchivos()
  23.         else:
  24.             print "Archivos creados con exito!!"
  25.             print "Presiona ENTER para cerrar la consola"
  26.  
  27. CrearArchivos = Escritura()
  28. CrearArchivos
  29.  
  30. raw_input()

El funcionamiento es practicamente simple, ejecutás el programa y el mismo te crea los archivos necesarios con el contenido de ellos.
Por ejemplo, en el archivo text.txt tenemos esto:

linea_a
linea_b
linea_a2
linea_b2
linea_a3
linea_b3
linea_c4
linea_f8
linea_a1

y el programa creará 4 archivos en formato .txt, el nombre de ellos será text_ y la letra que sigue del _ (guión bajo):

text_a.txt
text_b.txt
text_c.txt
text_f.txt

por ejemplo archivo text_a.txt contendría esto dentro de él:

linea_a
linea_a2
linea_a3
linea_a1

creo que eso es justamente lo que necesitás.
Te pregunté recién para que necesitarías un código así ya que este código no va a funcionar si le haces modificaciones al archivo text.txt, en realidad el código que te puse recién es sólo un ejemplo de cómo podrías hacer el script para lo que necesitás.
Que andés bien!! Suerte!

PD: Tanto el archivo del programa que te hice recién como el archivo text.txt deben estar en el mismo directorio/ruta.
se agradece enormemente tu ayuda pero me entendiste mal, lo de hacer lineas "a y b" era un ejemplo, pero en realidad son dos archivos los que tienen que crearse con las lineas alternadas, por ejemplo si tengo un texto con estas lineas:

Texto original:

Linea1
Linea2
Linea3
Linea4
Linea5
Linea6
Linea7
Linea8

etc etc

deben resultar dos ficheros

fichero 1 con el contenido:

Linea1
Linea3
Linea5
Linea7

fichero 2 con el contenido:
Linea2
Linea4
Linea6
Linea8
  #5 (permalink)  
Antiguo 24/03/2014, 00:11
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Lectura de lineas alternadas de un archivo

Por esa misma razón te hice el código de ejemplo, porque de alguna manera debés de utilizar un método para poder diferenciar lo que debe ir en un archivo y en otro.
Realmente es bastante dificil ayudarte con la poca explicación que nos das, por favor se más detallado así podemos ayudarte.
Lo que ahora entiendo en tu nuevo post, es que, lo que querés hacer es crear 2 archivos .txt y en uno de ellos guardar ciertas líneas que contentan números inpares y en el otro archivo otros datos que contengan en algún lugar de él, números pares.
Porque es imposible separar 2 archivos si no se sabe que método utilizar, por eso decinos con más detalles cuál es el método que utilizarías para diferenciar lo que se debe guardar en un archivo y en otro.
O por lo menos dejanos parte del contenido de tu archivo que querés separar así intentamos poder ayudarte.

Cita:
text_a.txt con el contenido:

linea_a
linea_a2
linea_a3
...

text_b.txt con el contenido

linea_b
linea_b2
linea_b3
....
El código que te hice es perfectamente correcto en lo que has pedido ayuda, revisá tu post anterior para comprobarlo.

Que andés bien!!
  #6 (permalink)  
Antiguo 24/03/2014, 04:38
Avatar de Restart  
Fecha de Ingreso: marzo-2009
Mensajes: 84
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Lectura de lineas alternadas de un archivo

Cita:
Iniciado por Principe_Azul Ver Mensaje
Por esa misma razón te hice el código de ejemplo, porque de alguna manera debés de utilizar un método para poder diferenciar lo que debe ir en un archivo y en otro.
Realmente es bastante dificil ayudarte con la poca explicación que nos das, por favor se más detallado así podemos ayudarte.
Lo que ahora entiendo en tu nuevo post, es que, lo que querés hacer es crear 2 archivos .txt y en uno de ellos guardar ciertas líneas que contentan números inpares y en el otro archivo otros datos que contengan en algún lugar de él, números pares.
Porque es imposible separar 2 archivos si no se sabe que método utilizar, por eso decinos con más detalles cuál es el método que utilizarías para diferenciar lo que se debe guardar en un archivo y en otro.
O por lo menos dejanos parte del contenido de tu archivo que querés separar así intentamos poder ayudarte.



El código que te hice es perfectamente correcto en lo que has pedido ayuda, revisá tu post anterior para comprobarlo.

Que andés bien!!
Eso es exactamente lo que quiero, que en un archivo guarde las lineas pares y en otro las impares, independiente de que texto vaya en cada linea, por eso en mi post inicial trate de ejemplificarlo con letra a y b, pero parece que no fue lo mejor, disculpa si no se entendio bien
  #7 (permalink)  
Antiguo 24/03/2014, 05:07
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Lectura de lineas alternadas de un archivo

Me parece que te di una solución que ha pasado por ignorada
  #8 (permalink)  
Antiguo 24/03/2014, 11:43
Avatar de Restart  
Fecha de Ingreso: marzo-2009
Mensajes: 84
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Lectura de lineas alternadas de un archivo

Cita:
Iniciado por Heli0s Ver Mensaje
Me parece que te di una solución que ha pasado por ignorada
probe tu solucion, pero solo me escribe en un archivo, en este caso en a.txt:

Código:
>>> Archivo = open("texto.txt", "r")
>>> Archivo1 = open("a.txt", "a")
>>> Archivo2 = open("b.txt", "a")

>>> x = 0
>>> for linea in Archivo:
	if x == 0:
		Archivo1.write(linea)
		x=1
	else:
		Archivo1.write(linea)
		x=0
  #9 (permalink)  
Antiguo 24/03/2014, 13:39
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Lectura de lineas alternadas de un archivo

Hola nuevamente, el compañero te pasó bien el código, tu error está en color rojo:

>>> Archivo = open("texto.txt", "r")
>>> Archivo1 = open("a.txt", "a")
>>> Archivo2 = open("b.txt", "a")

>>> x = 0
>>> for linea in Archivo:
if x == 0:
Archivo1.write(linea)
x=1
else:
Archivo1.write(linea)
x=0


A 1 cambialo por 2 para que escriba en el otro archivo.

Buena suerte!!!
  #10 (permalink)  
Antiguo 24/03/2014, 13:45
Avatar de Restart  
Fecha de Ingreso: marzo-2009
Mensajes: 84
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Lectura de lineas alternadas de un archivo

Cita:
Iniciado por Principe_Azul Ver Mensaje
Hola nuevamente, el compañero te pasó bien el código, tu error está en color rojo:

>>> Archivo = open("texto.txt", "r")
>>> Archivo1 = open("a.txt", "a")
>>> Archivo2 = open("b.txt", "a")

>>> x = 0
>>> for linea in Archivo:
if x == 0:
Archivo1.write(linea)
x=1
else:
Archivo1.write(linea)
x=0


A 1 cambialo por 2 para que escriba en el otro archivo.

Buena suerte!!!
mmmmm, al parecer estoy cometiendo un error de novato, porque estoy trabajando con el IDE de python, en primera instancia use el codigo equivocado (el error que mencionas mas arriba), despues segui usando el IDE con el codigo correcto pero aun asi no funcionaba


tuve que cerrar el IDE, y poner el codigo correcto para que funcionara, algo se me esta escapando, pero mi error es que no estoy usando bien el IDE de python


la solución de Helios finalmente me sirvio (gracias a los dos finalmente)

Última edición por Restart; 24/03/2014 a las 13:59
  #11 (permalink)  
Antiguo 24/03/2014, 16:16
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Lectura de lineas alternadas de un archivo

Me alegro que te haya salido todo bien!!
Pero mi consejo es que crees tus códigos en un archivo con formato .py para que te sea más fácil crear y editar tus programas, ahora si lo que querés es aprender a utilizar la IDLE escribiendo tus códigos línea a línea, me parece muy bien!!
Pero con usar un archivo ahorrarías mucho más tiempo.

Cita:
mmmmm, al parecer estoy cometiendo un error de novato, porque estoy trabajando con el IDE de python, en primera instancia use el codigo equivocado (el error que mencionas mas arriba), despues segui usando el IDE con el codigo correcto pero aun asi no funcionaba


tuve que cerrar el IDE, y poner el codigo correcto para que funcionara, algo se me esta escapando, pero mi error es que no estoy usando bien el IDE de python

Muuuy bien! estás aprendiendo porque si algo te falta y es que no estás cerrando los archivos!!!!!! por eso no te funcionó cuando lo probaste de nuevo con el código correcto.
Al final de todo tu código (este que te puso el compañero Heli0s) insertá estas 3 lineas, que serían los métodos para cerrar los 3 archivos que abriste:

Código Python:
Ver original
  1. Archivo.close()
  2. Archivo1.close()
  3. Archivo2.close()

Buena suerte!!
  #12 (permalink)  
Antiguo 24/03/2014, 16:27
Avatar de Restart  
Fecha de Ingreso: marzo-2009
Mensajes: 84
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Lectura de lineas alternadas de un archivo

Cita:
Iniciado por Principe_Azul Ver Mensaje
Al final de todo tu código (este que te puso el compañero Heli0s) insertá estas 3 lineas, que serían los métodos para cerrar los 3 archivos que abriste:

Código Python:
Ver original
  1. Archivo.close()
  2. Archivo1.close()
  3. Archivo2.close()

Buena suerte!!
Si, lo agregue, pero es raro, porque a veces me funciona y otra veces no. Se supone que en teoria al hacer enter en el IDE de python(IDLE) se ejecuta todo el codigo.

Para no seguir calentandome la cabeza baje otro IDE llamado NINJA-IDE, que es mas practico al momento de ejecutar el codigo, de hecho tiene un boton para eso.

Ahora con el nuevo IDE, me funciona siempre!
  #13 (permalink)  
Antiguo 25/03/2014, 00:26
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Lectura de lineas alternadas de un archivo

Pues no siempre es así amigo, depende de la línea que hayas escrito en el IDLE.
Por ejemplo esto:

Código Python:
Ver original
  1. >>> saludo = "hola"
  2. >>> if saludo == "hola":
  3.     print "educado"
  4.  
  5. educado
  6. >>>

al crear la variable saludo el intérprete continuó sin esperar algún o algunos comandos obligatorios, pero cuando puse if saludo == "hola": el intérprete esperó a que yo asignara los comandos que se deberían ejecutar si la condición se cumple, que de hecho, se cumplió.

Cita:
Para no seguir calentandome la cabeza baje otro IDE llamado NINJA-IDE, que es mas practico al momento de ejecutar el codigo, de hecho tiene un boton para eso
Me parece muy bien, muchas veces un programa preparado específicamente para tal cosa es lo mejor, porque es más rápido, fácil y hasta incluso puede tener mejor gráfica y más si está escrito en C/C++.
Yo personalmente no uso el intérprete para crear mis códigos, los creo y modifico desde un archivo .py

Cita:
Ahora con el nuevo IDE, me funciona siempre!
Me alegro

Que andés bien!! Suerte!!!

Etiquetas: gui, lectura, lineas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:04.