Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: fesacu en 13 Abril 2018, 18:05 pm



Título: extaer datos en columnas ordenadas para bucle Python
Publicado por: fesacu en 13 Abril 2018, 18:05 pm
buenas tardes,
soy menos que novato en esto de la programacion y despues de leer tutoriales , videos, foros etc.., no consigo hacer lo siguiente, no se si podrian ayudar, o darme alguna idea..
gracias por adelantado.

tengo el siguiente txt :

nombre palabra palabra2 palabra4 jose
una linea cualquiera
otra linea cualquiera
otra linea cualquiera
coche palabra6 palabra7 palabra1 mercedes
coche bmw
nombre palabra6 palabra7 palabra1 palabra6 palabra7luis
una linea cualquiera
otra linea cualquiera
coche mercedes
coche palabra1 palabra2 palabra3 peugeot
nombre antonio
una linea cualquiera
otra linea cualquiera
otra linea
coche mercedes
coche fiat
coche seat

quiero de alguna forma tener en una tabla csv de tre columnas. ( x, y , z):

jose mercedes bmw
luis mercedes peugeot
antonio mercedes fiat


luego, una vez que tenga las tres columnas, por medio de un bucle for or while leerias esas columnas (listas).
quedaria algo así:


import csv
archivo=open("fichero.csv")
lector=csv.reader(archivo, delimiter=";")
for linea in lector:

x=lista[0]
y=lista[1]
z=lista[2]


print("la persona "+x "tiene un coche "+y " y un coche " z)

la persona jose tiene un coche mercedes un coche bmw
la persona luis tiene un coche mercedes y un coche peugeot
la persona antonio tiene un coche mercedes y un coche fiat

Hasta ahora lo unico que se hacer es sacar cada lista por separado usando las palabras clave:

nombre y coche respectivamente; pero no se como obtener el csv con las columnas ordenadas para luego poder pasar el bucle.

Gracias de nuevo.


Título: Re: extaer datos en columnas ordenadas para bucle Python
Publicado por: srWhiteSkull en 13 Abril 2018, 18:23 pm
Usa el método sort() en el array pero para no perder el índice ya que lo asocias al resto de arrays concatena a cada elemento un espacio y el índice antes de la ordenación, luego lee cada elemento ordenado y toma el índice que estará al final de cada cadena para relacionar los demás datos. Esa sería una forma pero habrá más. En la programación no todo es encontrar una función o librería que te lo haga, también puedes improvisar métodos artesanales en base a los conocimientos fundamentales de la programación y del lenguaje de turno.


Título: Re: extaer datos en columnas ordenadas para bucle Python
Publicado por: Sentex en 15 Abril 2018, 23:53 pm
Aquí tiene un script para hacerte el trabajo ;)

Código
  1. #Leer columnas de un archivo By Sentex
  2.  
  3. import sys
  4.  
  5. COLUMNA1 = [] #Se declaran las columnas
  6. COLUMNA2 = []
  7. COLUMNA3 = []
  8.  
  9. NUMERO_LINEAS = 0
  10.  
  11. print("[#] Leyendo el archivo...")
  12. with open("fichero.txt", "r") as f: #Se lee el archivo por lineas y se almacenan como list
  13.    data = f.readlines()
  14.    f.close()
  15. print("[*] Archivo leido")
  16. print("[#] Creando columnas...")
  17. print("")
  18. for line in data: #Se coje de una en una las lineas que tenia el archivo
  19.    line = line.replace("\n", "").split(' ') #Se separa la linea en espacios Ejemplo: a = "pepe jesus pablo".split(' '). a seria un valor list y seria traducido asi a = ["pepe", "jesus", "pablo"]
  20.    COLUMNA1.append(line[0]) #Se introducen valores en las columnas
  21.    COLUMNA2.append(line[1])
  22.    COLUMNA3.append(line[2])
  23.    NUMERO_LINEAS += 1 #Se cuentan las lineas
  24. print("[*] Columnas creadas")
  25. print("[#] Mostrando datos...")
  26.  
  27. n = 0
  28.  
  29. while True: #Se crea un bucle para mostrar los datos que solo acabara cuando se hayan mostrado todas las lineas del archivo por eso se contaron antes
  30.    print("la persona {} tiene un coche {} y un coche {}".format(COLUMNA1[n], COLUMNA2[n], COLUMNA3[n]))
  31.    n += 1
  32.    if n == NUMERO_LINEAS:
  33.        break
  34. print("")
  35. print("[*] Datos mostrados!") #Fin del programa
  36. sys.exit()
  37.  

Fichero.txt
Código:
jose mercedes bmw
luis mercedes peugeot
antonio mercedes fiat

Output
Código:
[#] Leyendo el archivo...
[*] Archivo leido
[#] Creando columnas...

[*] Columnas creadas
[#] Mostrando datos...
la persona jose tiene un coche mercedes y un coche bmw
la persona luis tiene un coche mercedes y un coche peugeot
la persona antonio tiene un coche mercedes y un coche fiat

[*] Datos mostrados!


Espero haber sido de ayuda. Un saludo!.


Título: Re: extaer datos en columnas ordenadas para bucle Python
Publicado por: Avispon99 en 16 Abril 2018, 04:35 am
El  " archivo=open("fichero.csv") " que estas usando no tiene un formato de apertura definido, se coloca un "r" para lectura o un "w" para escritura.. dependiendo..