elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Bases de datos utilizando archivo .txt en Python.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Bases de datos utilizando archivo .txt en Python.  (Leído 3,361 veces)
El mas antiguo

Desconectado Desconectado

Mensajes: 94



Ver Perfil
Bases de datos utilizando archivo .txt en Python.
« en: 13 Noviembre 2022, 21:29 pm »

Estoy tratando de realizar mi gran sueño que es crear mis propias BD y para ello necesito
alguna ayudita(descarto que alguien me diga «para que reinventar la rueda» gente sueños
son sueños).-
La ayuda es ¿de dónde puedo bajar un archivo con más de 100.000 registros y un ancho
de por lo menos unas 40 caracteres, cada uno?
Para hacerme enter mejor, lo que quiero medir (en tiempo) cuanto tarda en mostrar un
registro(por ej. el 100.000) ordenado y cuanto tarda sin ordenar (esto desde una lista,
por supuesto).-
Bueno es todo y desde ya muchas gracias por el tiempo que le dediquen.-

Slds. Daniel ☕☕☕


En línea

Danielㅤ


Conectado Conectado

Mensajes: 1.675


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: Bases de datos utilizando archivo .txt en Python.
« Respuesta #1 en: 13 Noviembre 2022, 21:41 pm »

Hola, desde mi punto de vista es buena idea que utilices archivos txt como bases de datos.

En cuanto al tiempo que puede tardar en mostrar un registro tomando tu ejemplo de 100 mil líneas/registros, tardaría menos de 1 segundo, apenas milésimas de segundos, de hecho python puede procesar millones de registros en apenas segundos.

Ahora para lograr ese archivo que vos necesitas para medir el tiempo, yo lo crearia con un simple código en python.


Saludos


En línea

El mas antiguo

Desconectado Desconectado

Mensajes: 94



Ver Perfil
Re: Bases de datos utilizando archivo .txt en Python.
« Respuesta #2 en: 13 Noviembre 2022, 22:05 pm »

Hola tocayo, debo deducir que me adivinaste el pensamiento
casi me respondes antes que diera de alta el post, jajajaja
gracias, gracias.-
Que me sugerís para crear el archivo, ¿un bucle repitiendo todas
las líneas/registros y ponerle un código en aumento? Ej.:

1,Yo vivo en este mundo, pero no pertenezco a las leyes de este mundo.
2,Yo vivo en este mundo, pero no pertenezco a las leyes de este mundo.
3,Yo vivo en este mundo, pero no pertenezco a las leyes de este mundo.
4,Yo vivo en este mundo, pero no pertenezco a las leyes de este mundo.
5,Yo vivo en este mundo, pero no pertenezco a las leyes de este mundo.
[...]
110000,Yo vivo en este mundo, pero no pertenezco a las leyes de este mundo.

Código
  1. import time
  2. inicio = time.time()
  3.  
  4. lista = []
  5. for x in range(1,1000000):
  6.    final = f"{x}, Yo vivo en este mundo pero no pertenezco a las leyes de este mundo"
  7.    lista.append(final)
  8.  
  9. fin = time.time()
  10. print(fin-inicio) # 0.2197284698486328
  11.  
Slds. Daniel ☕☕☕
« Última modificación: 13 Noviembre 2022, 22:12 pm por El mas antiguo » En línea

reymosquito

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: Bases de datos utilizando archivo .txt en Python.
« Respuesta #3 en: 14 Noviembre 2022, 04:44 am »

hola: hay varias cosas:
1) se puede mejorar la velocidad de la creación de listas con listas por comprensión
2)el segundo valor de range no es incluido, así que debes sumarle uno más si querés 100.000
3)cuando se usan varios enteros es un poco díficil la lectura por lo cual se puede usar "_"
4)para escribir el archivo no es necesario un bucle.

Ejemplo de lo que digo:
Código
  1. import time
  2.  
  3. inicio = time.time()
  4. otra=[f"{x}, Yo vivo en este mundo pero no pertenezco a las leyes de este mundo" for x in range(1,100_001)]
  5. fin = time.time()
  6. print(fin-inicio) #comparalo con el tiempo de la otra forma, ésta debería ser más rápida.
  7.  
  8. with open("registro.txt","a") as archivo:
  9.    archivo.write('\n'.join(otra))
  10.  

y listo un archivo con 100.000 líneas
En línea

El mas antiguo

Desconectado Desconectado

Mensajes: 94



Ver Perfil
Re: Bases de datos utilizando archivo .txt en Python.
« Respuesta #4 en: 14 Noviembre 2022, 15:42 pm »

Hola rey, ¿cómo estás?, gracias por tu tiempo y el código,
te cuento, estoy como al principio, lo que necesito es tener
el archivo «desordenado» y medir el tiempo de búsqueda de
un registro por el código y luego la misma lista, pero ordenada
y medir nuevamente el tiempo que tarda el programa en encontrar
el mismo registro.-
Estuve practicando con esto, pero claro, el orden no lo hace como
lo deseado:

Citar
6,Yo vivo en este mundo, pero no pertenezco a las leyes de este mundo.
5,Yo vivo en este mundo, pero no pertenezco a las leyes de este mundo.
4,Yo vivo en este mundo, pero no pertenezco a las leyes de este mundo.
3,Yo vivo en este mundo, pero no pertenezco a las leyes de este mundo.
2,Yo vivo en este mundo, pero no pertenezco a las leyes de este mundo.
[...]
1,Yo vivo en este mundo, pero no pertenezco a las leyes de este mundo.

Yo inocentemente esperaba esto:

Citar
1,Yo vivo en este mundo, pero no pertenezco a las leyes de este mundo.
2,Yo vivo en este mundo, pero no pertenezco a las leyes de este mundo.
3,Yo vivo en este mundo, pero no pertenezco a las leyes de este mundo.
4,Yo vivo en este mundo, pero no pertenezco a las leyes de este mundo.
5,Yo vivo en este mundo, pero no pertenezco a las leyes de este mundo.
[...]
100000,Yo vivo en este mundo, pero no pertenezco a las leyes de este mundo.

Pero como es lógico apareció algo distinto, es obvio que toma los números
como string y no como enteros:

Voy a seguir practicando, estoy muy entusiasmado, cuando termine con esto
me faltan 2 cosas muy necesarias que luego se las comento.- 

Slds. Daniel ☕☕☕
En línea

El mas antiguo

Desconectado Desconectado

Mensajes: 94



Ver Perfil
Re: Bases de datos utilizando archivo .txt en Python.
« Respuesta #5 en: 14 Noviembre 2022, 18:24 pm »

Bueno, al fin la búsqueda/práctica dio sus frutos.

Con esta línea creo un archivo con 100.001 registros en forma descendente:

Código
  1. otra=[f"{x}, Yo vivo en este mundo pero no pertenezco a las leyes de este mundo" for x in range(100_001,0,-1)]
  2.  

Citar
100001, Yo vivo en este mundo pero no pertenezco a las leyes de este mundo
100000, Yo vivo en este mundo pero no pertenezco a las leyes de este mundo
99999, Yo vivo en este mundo pero no pertenezco a las leyes de este mundo
99998, Yo vivo en este mundo pero no pertenezco a las leyes de este mundo
[...]
1, Yo vivo en este mundo pero no pertenezco a las leyes de este mundo
Con esta lo ordeno en forma ascendente:

Código
  1. lista = sorted(tmpLista, key=lambda x: int(x[0]))

Me falta tan solo medir los tiempos de búsqueda con la lista ordenada y sin ordenar,
y otras 2 cosas que luego les comento…

Slds. Daniel ☕☕☕
« Última modificación: 15 Noviembre 2022, 01:06 am por El mas antiguo » En línea

Danielㅤ


Conectado Conectado

Mensajes: 1.675


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: Bases de datos utilizando archivo .txt en Python.
« Respuesta #6 en: 14 Noviembre 2022, 18:50 pm »

Hola, también podes usar el método reverse() con una lista para revertir su contenido:

Código
  1. archivo = open("archivo.txt", "r").read().splitlines().reverse()
  2. archivo2 = open("archivo2.txt", "w")
  3. archivo2 = archivo2.write(archivo.join("\n"))
  4. archivo2.close()

Pruébalo y nos comentas.


Saludos
En línea

El mas antiguo

Desconectado Desconectado

Mensajes: 94



Ver Perfil
Re: Bases de datos utilizando archivo .txt en Python.
« Respuesta #7 en: 14 Noviembre 2022, 21:03 pm »

Hola Dani, gracias por el código, está muy bueno, pero no necesito crear 2 archivos.-
A continuación muestro mi código y verás que lo hago a partir de una lista, natural
(tal cual está en el archivo) y luego ordenada y me lleve una sorpresa, sin ordenar
es lo mismo que ordenada.-

Código
  1. import time
  2. import codecs
  3.  
  4. lista = []
  5. with codecs.open('registro.txt', 'r', encoding='utf-8') as archivo:
  6.    for tmp_linea in archivo:
  7.        tmp_linea.replace("\r,\n"," ")
  8.        linea = tmp_linea.split(',')
  9.        lista.append(linea)
  10.  
  11. lista = sorted(lista, key=lambda x: int(x[0])) # Ordenar la lista
  12. inicio = time.time()
  13.  
  14. for lis in lista:
  15.    if int(lis[0]) == 100000: # Si la lista esta al natural, el 100000 se reemplaza
  16.        break                 # con un 10
  17.  
  18. fin = time.time()
  19. print(fin-inicio)
  20.  
  21. ## Lista sin ordenar = 0.014191389083862305
  22. ## Lista ordenada    = 0.015621662139892578


Al fin esta última es la manera más rápida...

Código
  1. import time
  2. import codecs
  3.  
  4. inicio = time.time()
  5.  
  6. with codecs.open('registro.txt', 'r', encoding='utf-8') as archivo:
  7.    for tmp_linea in archivo:
  8.        tmp_linea.replace("\r,\n"," ")
  9.        linea = tmp_linea.split(',')
  10.        if linea[0] == '10':
  11.            break
  12.  
  13. fin = time.time()
  14. print(fin-inicio)
  15.  
  16. '''
  17. Con la lista sin ordenar   = 0.2968323230743408
  18. Con la lista ordenada      = 0.3124265670776367
  19. Sacado directo del archivo = 0.26558613777160645
  20. '''

Continuo con el resto.-
Slds. Daniel ☕☕☕
« Última modificación: 14 Noviembre 2022, 21:23 pm por El mas antiguo » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines