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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Utilización de bitarrays
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Utilización de bitarrays  (Leído 2,251 veces)
luu_cuuesta

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Utilización de bitarrays
« en: 29 Diciembre 2021, 16:10 pm »

Hola a todos!!
Querría saber cómo se podría implementar el código que muestro a continuación pero utilizando bitarrays.

Código
  1. # Importamos las librerías necesarias
  2. from tqdm import tqdm
  3. import os
  4. import sys
  5.  
  6. # Variables globales que apuntan a los ficheros
  7. global archivo
  8.  
  9.  
  10. # Función que muestra por pantalla las opciones que tendrá que elegir el usuario
  11. # Por tanto, no tiene parámetros de entrada
  12. # Pero sí de salida. Devuelve la opción que haya introducido el usuario
  13. def menu():
  14.    print("\nCodificación de texto con LZSS")
  15.    print("------------------------------\n")
  16.  
  17.    print("\t\t MENU")
  18.    print("1. Comprimir archivo")
  19.    print("2. Descomprimir archivo")
  20.    print("0. Salir")
  21.    opcion=input("Introduzca el número de la opción a elegir: ")
  22.    return opcion
  23.  
  24.  
  25. # Función que tiene como objetivo leer un fichero
  26. # Como parámetro de entrada se le pasa la ruta del fichero que ha introducido el usuario
  27. # Y como parámetro de salida tiene una lista que devuelve el contenido del fichero leido
  28. def Leer_Fichero(ruta):
  29.    archivo = open(ruta,'r',encoding="utf-8",errors='ignore') #ponemos el utf-8 porque nuestro archivo contiene caracteres especiales
  30.    datos = []
  31.    for linea in archivo:
  32.        datos.append(linea)
  33.    archivo.close()
  34.    return datos
  35.  
  36. # Funcion para escribir texto comprimido en archivo
  37. def Escribe_Fichero(dest,Texto,lInsp,lMem):
  38.    archivo = open(dest,"w")
  39.    archivo.write(str(lInsp) + '\n')
  40.    archivo.write(str(lMem) + '\n')
  41.    archivo.write(Texto)
  42.    archivo.close()
  43.  
  44. def Escribe_Fichero2(Ruta,Texto):
  45.    archivo = open(Ruta,"w")
  46.    archivo.write(Texto)
  47.    archivo.close()
  48.  
  49.  
  50. # Funcion para codificar
  51. def _encode(prim,cnt):
  52.    aux = '(' + str(hex(prim))[2:] + ',' + str(hex(cnt))[2:] + ')'
  53.    return aux
  54.  
  55. #Funcion que devuelve inicio y fin en enteros
  56. def _decode(Coded):
  57.    poscoma = str.find(Coded,',')
  58.    if poscoma != -1:
  59.        try:
  60.            ini = int(Coded[1 : poscoma],16)
  61.        except:
  62.            return 0,0
  63.        try:
  64.            fin = int(Coded[poscoma + 1: len(Coded)-1],16)
  65.        except:
  66.            return 0,0
  67.        return ini,fin
  68.    else:
  69.        return 0,0
  70.  
  71. # Cadena con espacios
  72. def _blancos(Cad,Cantidad):
  73.    Cad = Cad + " " * Cantidad
  74.    return Cad
  75.  
  76. # Inserta blancos al frente
  77. def _fblancos(Cad,Cantidad):
  78.    Cad = " " * Cantidad + Cad
  79.    return Cad
  80.  
  81. # Mueve caracteres a la ventana de inspeccion
  82. def _toshift(Vdel,Vins,cantidad):
  83.    Vins = Vins[cantidad:] + Vdel[:cantidad]
  84.    Vdel = Vdel[cantidad:]
  85.    return Vdel,Vins
  86.  
  87. # Funcion para buscar coincidencias
  88. def _matches(mem,insp):
  89.    while insp != '':
  90.        pos = str.find(mem,insp)
  91.        if pos != -1:
  92.            break
  93.        else:
  94.            insp = insp[:-1]
  95.    return pos,len(insp)
  96.  
  97. # Funcion que devuelve un texto comprimido
  98. def Comprimir(Texto,TamInsp,TamMem):
  99.    V_Mem = ''
  100.    V_Insp = ''
  101.    V_Mem = _blancos(V_Mem,TamMem)
  102.    V_Insp = _blancos(V_Insp,TamInsp)
  103.    Comprimido = [] #Array donde junto el texto a guardar
  104.    for L in tqdm(Texto):
  105.        cant = len(L)
  106.        cont = 1
  107.        shcant = cont
  108.        L_Comp = "" #Linea a comprimir
  109.        L, V_Insp = _toshift(L,V_Insp,TamInsp)#Inicializo mi ventana insp  
  110.        L = _blancos(L,TamInsp)
  111.        while cont < cant:
  112.            inicio,fin = _matches(V_Mem,V_Insp)
  113.        #Unicamente se codificaran las coincidencias
  114.        #mayores a la codificacion
  115.            if (fin - inicio) < len(str(TamMem)*2)+3:
  116.                L_Comp = L_Comp[:] + V_Insp[0]
  117.                #Muevo un solo caracter del texto a inspeccion
  118.                shcant = 1
  119.                cont += shcant
  120.            else:
  121.                L_Comp = L_Comp[:] + _encode(inicio,fin)
  122.                shcant = fin
  123.                cont += shcant
  124.            V_Insp, V_Mem = _toshift(V_Insp,V_Mem,shcant)
  125.            V_Insp = _fblancos(V_Insp,shcant)
  126.            L, V_Insp = _toshift(L,V_Insp,shcant)
  127.            L = _blancos(L,TamInsp)
  128.        Comprimido.append(L_Comp)
  129.    return '\n'.join(Comprimido)  
  130.  
  131.  
  132. def Descomprime(Texto):
  133.    szInsp = int(Texto[0])
  134.    szMem = int(Texto[1])
  135.    Texto = Texto[2:]
  136.    l_Descomp = []
  137.    V_Mem =''
  138.    V_Mem = _blancos(V_Mem,szMem)  
  139.    for l in tqdm(Texto):
  140.        s_Descomp = ''
  141.        while l != '\n' and l!= '':
  142.            if l[0] != '(':
  143.                V_Mem = V_Mem[1:] + l[0]
  144.                s_Descomp = s_Descomp + l[0]
  145.                l = l[1:]
  146.            else:
  147.                PosFin = str.find(l,')')
  148.                Encoded = l[0:PosFin+1]
  149.                i,f = _decode(Encoded)
  150.                if (i != 0 or f !=0):
  151.                    s_Descomp = s_Descomp + V_Mem[i:i+f]
  152.                    V_Mem = V_Mem[f:] + V_Mem[i:i+f]
  153.                    l = l[PosFin+1:]
  154.                else:
  155.                    V_Mem = V_Mem[1:] + l[0]
  156.                    s_Descomp = s_Descomp + l[0]
  157.                    l = l[1:]
  158.        l_Descomp.append(s_Descomp)
  159.    return '\n'.join(l_Descomp)                
  160.  
  161.  
  162. #funcion principal que llama al resto de funciones
  163. def main():
  164.  
  165.    opcion = menu()
  166.  
  167.    while(opcion=='1'):
  168.        flag = False
  169.  
  170.        while(flag==False):
  171.            ruta=input("¿Qué texto desea comprimir? Introduzca la ruta completa:\n")
  172.  
  173.            if (os.path.exists(ruta) == False):
  174.                print("\n*Archivo no encontrado*")
  175.                print("Introduce un archivo existente.")
  176.            else:
  177.                flag = True
  178.  
  179.        TamInsp = int(input('Tamaño ventana inspección: '))
  180.        TamMem = int(input('Tamaño ventana memoria: '))
  181.        Documento = Leer_Fichero(ruta)
  182.  
  183.        if Documento != None:  
  184.            Txt_Comp = Comprimir(Documento,TamInsp,TamMem)
  185.            print("\n¡El archivo se ha comprimido satisfactoriamente!")
  186.  
  187.            dest = input('¿Dónde desea guardar dicha compresión? Introduzca la ruta destino:\n')
  188.  
  189.            Escribe_Fichero(dest,Txt_Comp,TamInsp,TamMem)
  190.            print("\nEl archivo se ha guardado.\n")
  191.        else:
  192.            print ('NO EXISTE EL ARCHIVO/ARCHIVO VACIO')
  193.  
  194.        continuar = input('Pulse "INTRO" para finalizar.')
  195.        sys.exit()
  196.  
  197.  
  198.    while(opcion=='2'):
  199.        flag = False
  200.  
  201.        while(flag==False):
  202.            ruta=input("¿Que fichero desea descomprimir? Introduzca la ruta completa:\n")
  203.  
  204.            if (os.path.exists(ruta) == False):
  205.                print("*Archivo no encontrado*")
  206.                print("Introduce un archivo existente.")
  207.            else:
  208.                flag = True
  209.  
  210.        Documento=Leer_Fichero(ruta)
  211.        toArchivo=Descomprime(Documento)
  212.        print("\n¡El archivo se ha descomprimido satisfactoriamente!")
  213.        dest = input('¿Dónde desea guardar la descompresión? Introduzca la ruta destino:\n')
  214.        Escribe_Fichero2(dest,toArchivo)
  215.        print("\nEl archivo se ha guardado.\n")
  216.  
  217.        continuar = input('Pulse "INTRO" para finalizar.')
  218.        sys.exit()
  219.  
  220.  
  221. main()


« Última modificación: 29 Diciembre 2021, 16:43 pm por luu_cuuesta » En línea

luu_cuuesta

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Utilización de bitarrays
« Respuesta #1 en: 29 Diciembre 2021, 16:22 pm »

Por cierto, el código está implementado con Python.


« Última modificación: 29 Diciembre 2021, 16:45 pm por luu_cuuesta » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Utilizacion de temas de windows xp en vb ( utilizacion de de controles) By Geo
Programación Visual Basic
zamaquiel 1 1,766 Último mensaje 17 Enero 2006, 20:53 pm
por EstoyBaneado
Utilizacion del Mouse En VB Net
Programación Visual Basic
washandwear 0 1,095 Último mensaje 7 Noviembre 2006, 09:58 am
por washandwear
Utilización de codigos MSN
Programación Visual Basic
ËrîC# 7 2,670 Último mensaje 7 Diciembre 2007, 18:53 pm
por ËrîC#
utilizacion de exploits
Bugs y Exploits
elezekiel 3 2,995 Último mensaje 5 Septiembre 2014, 23:18 pm
por MCKSys Argentina
Utilizacion de hardinfo
GNU/Linux
Camilo1998 0 1,554 Último mensaje 8 Noviembre 2018, 21:03 pm
por Camilo1998
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines