Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - SlayerBur

#11
Cita de: tincopasan en 13 Junio 2021, 20:11 PM
tal como está no hay forma de adivinar nada.
¿qué es images?¿querés contar los colores directamente de la imagen?

¿eso es un programa?

mas que un programa es un juego.
images seria esto, una lista.
images = [celda(xCelda,yCelda,"a1"), celda(xCelda+separacion,yCelda,"a2"), celda(xCelda+separacion*2,yCelda,"a3"), celda(xCelda+separacion*3,yCelda,"a4"), celda(xCelda+separacion*4,yCelda,"a5"), # Fila 1
        celda(xCelda,yCelda+separacionY,"b1"),celda(xCelda+separacion,yCelda+separacionY,"b2"),celda(xCelda+separacion*2,yCelda+separacionY,"b3"),celda(xCelda+separacion*3,yCelda+separacionY,"b4"),celda(xCelda+separacion*4,yCelda+separacionY,"b5"), # Fila 2
        celda(xCelda,yCelda+separacionY*2,"c1"),celda(xCelda+separacion,yCelda+separacionY*2,"c2"),celda(xCelda+separacion*2,yCelda+separacionY*2,"c3"),celda(xCelda+separacion*3,yCelda+separacionY*2,"c4"),celda(xCelda+separacion*4,yCelda+separacionY*2,"c5"),] # Fila 3


solo quero contar cuantos colores se repiten en cada linea
#12
Buen dia.

Tengo un problema a la hora de crear un bucle for para comprobar si el color es igual al nombre en una lista.

    for i in linea1:
        for imagen in images:
            for pos in lugar[i]:
                if (imagen.color == color[i]) and (imagen.name == pos):
                    linea2.append(imagen.name)
                    #print(imagen.name)


varables:

    lugar = [("a1","a2","a3","a4","a5"),("b1","b2","b3","b4","b5"),("c1","c2","c3","c4","c5")]
    linea1 = [(0),(1),(2)]
color = [(255,0,0), (0,255,0), (0,0,255), (255,255,0), (255,0,255), (0,255,255), (150,150,0)]


lo que quiero lograr es contar y agregar en en una lista la cantidad de colores por linea,
2 verde, 3 rojo / 3 verde, 2 rojo

https://imgur.com/a/gYMu6UT
asi se veria en el programa

y lo unico que logro obtener es color por linea, ej: rojo 3 / verde 3 / azul 1

espero que se entienda, y gracias de antemano
#13
Scripting / Re: De txt a diccionario
1 Junio 2021, 23:18 PM
Cita de: DtxdF en  1 Junio 2021, 02:10 AM
El problema con eval(...) es que ejecuta código arbitrario. Por ejemplo:

La saldría sería:

Código (bash) [Seleccionar]
dtxdf

@SlayerBur

Sí, me había faltado agregar un pequeño trozo. Línea 26:

Código (python) [Seleccionar]
files[name] = [x.strip().replace("'", "") for x in files[name].split(",")]

El replace(...).

Editado:

Por cierto, y siguiendo la recomendación de @tincopasan, es recomendable colocar nuevas líneas para que sea más fácil editarlo. Por suerte el script puede leer e interpretar de la misma manera lo siguiente:

Con nuevas líneas:
Imagen: ['.png', '.NEF', '.jpg', '.JPG', '.ao']
Texto: ['.doc', '.pdf', '.cfg']
Videos: ['.mp4', '.avi', '.flv']
Otros: []


Sin nuevas líneas:
Imagen: ['.png', '.NEF', '.jpg', '.JPG', '.ao']Texto: ['.doc', '.pdf', '.cfg']Videos: ['.mp4', '.avi', '.flv']Otros: []

La saldría sería la misma, y es más recomendable la primera opción para el que tiene que editar las extensiones.

~ DtxdF

El codigo es creado mediante una inteface grafica, no seria necesario usar el txt.
Inclusive estoy pensando en publicar el codigo, para el que quiera usarle o modificarle :D
#14
Scripting / Re: De txt a diccionario
1 Junio 2021, 00:45 AM
Cita de: DtxdF en 31 Mayo 2021, 00:34 AM
Código (python) [Seleccionar]
#!/usr/local/bin/python3.7

import re
import pprint

filename = "filename.txt"
files = {}

with open(filename, "r") as fd:
    for line in fd:
        line = line.strip()
        if not (line):
            continue

        tokens = re.split("(\w+: )+", line)
        i = 0
        while (i < len(tokens)-1):
            name = tokens[i].strip()
            if not name:
                i += 1
                continue

            extensions = tokens[i+1].strip()
           
            files[name] = re.sub("(\[|\])", "", extensions)
            files[name] = [x.strip() for x in files[name].split(",")]

            i += 2

pprint.pprint(files)


Resultado:
{'Imagen:': ["'.png'", "'.NEF'", "'.jpg'", "'.JPG'", "'.ao'"],
'Otros:': [''],
'Texto:': ["'.doc'", "'.pdf'", "'.cfg'"],
'Videos:': ["'.mp4'", "'.avi'", "'.flv'"]}


Faltaría eliminar las comillas simples, pero ya eso es más fácil, o simplemente no puedes incluirlo en filename.txt.

Espero te sirva.

~ DtxdF

Tuve que hacer una pequeña modificacion pero ya quedo, gracias :D 
#15
Scripting / Re: De txt a diccionario
31 Mayo 2021, 00:06 AM
Cita de: DtxdF en 30 Mayo 2021, 23:56 PM
Hola @SlayerBur

La cuestión es que estás abriendo el archivo en modo escritura (w), pero este modo borrará todo el contenido que tenga el archivo de destino, por lo que si haces una lectura mucho después, verás que estará vacío.

Puedes hacer dos cosas. La primera es abrir y leer todo el archivo primero, pero ésto consume mucha memoria, por lo que sería útil sólo si no te importa desperciarla y también si es menos de la que está en uso. La segunda es leer línea por línea, modificarla y escribir o en la salida o en un archivo de salida diferente al que está abierto.

Recomiendo la segunda para la mayoría de casos. Incluso con la segunda opción, en caso de enviar el resultado en la salida, puedes combinar ese contenido con otros programas al estilo unix usando tuberías.

~ DtxdF

El problema no es el guardado, la idea es que remplace todo el contenido.
el problema es al cargar, que no se crea el diccionario.
la informacion se guarda asi:

Imagen: ['.png', '.NEF', '.jpg', '.JPG', '.ao']Texto: ['.doc', '.pdf', '.cfg']Videos: ['.mp4', '.avi', '.flv']Otros: []

lo que quiero es que esa informacion del .txt pase a ser un diccionario asi:

datos = {"Imagen":[".png",".NEF",".jpg", ".JPG"], "Texto":[".doc",".pdf",".cfg"], "Videos":[".mp4",".avi",".flv"], "Otros":[]}
#16
Scripting / De txt a diccionario
30 Mayo 2021, 20:12 PM
Buen día.

Quería saber si alguien sabría como hacer para que el contenido de un txt (guardado previamente con la informacion de un diccionario), luego pueda cargarlo, volver a modificarlo y guardarlo nuevamente.
El guardado funciona correctamente, el problema sucede cuando cargo el texto, una vez cargado, todo lo que utilizaba el diccionario comienza a fallar.

Guardado:

   file = open("./filename.txt", "w")
   for key, value in datos.items():
       file.write(str(key)+ ": " + str(value))
   file.close()




   file = open("./filename.txt", "r")
   for linea in file.readlines():
       #l = linea.replace("'"," ").replace("[","").replace("]","").replace(",","")
       datos = str({linea})


Gracias de antemano
#17
Scripting / Re: Ayuda con treeview (Tk)
29 Mayo 2021, 23:18 PM
Creo yo que podrias arreglarlo agregando un ID 11 (aun que sea vacio),
o la otra opcion es verificar si el ID existe, continuar (Caso del 9 y 10), si no existe, sumar +1, para llegar al 12.
En caso de no haber 12, y existe por ejemplo un 15, haria el mismo paso hasta llegar al 15, haciendo que el ID_Numero sea siempre igual al registro. No se si se entiende lo que digo..

PD>
puedes modificar
self.id_numero = self.id_numero + 1
por
self.id_numero += 1
#18
Cita de: DtxdF en 29 Mayo 2021, 01:09 AM
Hola @SlayerBur

Creo comprender lo que deseas. Lo que quieres es crear una carpeta con un nombre específico y que allí contenga archivos con extensiones específicas. Por lo que veo quieres mover esos archivos, no copiarlos, así que usa archivos de pruebas por si acaso.

Código (python) [Seleccionar]
#!/usr/local/bin/python3.7

import os
import shutil
import pathlib

RECURSIVE: bool = False

def mglob(extension: str, input_dir: str, target_dir: str, recursive: bool = False):
    """
    Mueve todos los archivos con la extensión `extension` en
    `input_dir` a `target_dir`. Si `recursive` es *True* se
    tratará de bajar a los demás subniveles de directorios.
    """

    if (recursive):
        path_obj = pathlib.Path(input_dir).rglob("*.%s" % extension)
    else:
        path_obj = pathlib.Path(input_dir).glob("*.%s" % extension)

    for f in path_obj:
        print(f"Moviendo {input_dir}/{f} a {target_dir}/")
        shutil.move(str(f), target_dir)

def main():
    try:
        extension = input("Extensión de los archivos objetivo: ")
    except (KeyboardInterrupt, EOFError):
        return

    if not (extension):
        print("¡Es necesario introducir la extensión!")
        return

    try:
        input_dir = input("Directorio de entrada: ")
    except (KeyboardInterrupt, EOFError):
        return

    if not (os.path.isdir(input_dir)):
        print("%s no existe o no es un directorio válido" % input_dir)
        return

    if not (input_dir):
        print("¡Es necesario introducir el directorio de entrada!")
        return

    try:
        target_dir = input("Directorio de salida: ")
    except (KeyboardInterrupt, EOFError):
        return

    if not (target_dir):
        print("¡Es necesario introducir el directorio de salida!")
        return

    if not (os.path.exists(target_dir)):
        os.makedirs(target_dir, exist_ok=True)
    elif not (os.path.isdir(target_dir)):
        print("%s existe pero no es un directorio válido." % target_dir)
        return

    mglob(extension, input_dir, target_dir, RECURSIVE)

if (__name__ == "__main__"):
    main()


Realmente lo único importante en el código son las librerías y la función mglob(...). Espero te sirva o por lo menos te dé una idea.

~ DtxdF

En si lo que queria es ver el error del codigo mio.
Que logre solucionar, era agregar la linea:

archivo = ruta + "/" +archivo
en el for de archivoExistente

Gracias :)
#19
Buen día.

Sucede que tengo un "problema" con un pequeño organizador que intento crear (quiero mediante una interface crear carpetas, seleccionar las extensiones y que luego organice las carpetas le programa), tengo practicamente todo ya.
Përo el problema sucede ahora, que estoy intentando poder hacer dicho trabajo desde otras carpetas (No desde donde tengo el .py).

Codigo:


ruta = os.getcwd()

def obtenerUbicacion():
   global ruta
   ruta = filedialog.askdirectory(parent=root, initialdir=os.getcwd(), title="Selecciones una carpeta:")



def moverarchivos():
   global ruta
   for archivo in testruta():
       nombre, extensión = os.path.splitext(archivo)
       for llave, dato in datos.items():
           ubicacion = ruta + "/" + llave
           for i in dato:
               if (extensión == ".py"):
                   pass
               elif (i == extensión):
                   shutil.move(archivo, ubicacion)
                   print(ubicacion)


def testruta():
   global ruta

   Archivos = os.listdir(ruta) #Obtengo los archivos existentes
   
   archivosExistentes = []
   for archivo in Archivos:
       archivosExistentes.append(archivo)
   print(ruta)
   print(archivosExistentes)
   return archivosExistentes


Eso es absolutamente todo lo que tengo sobre mover el archivo.
esta en el mismo orden que lo tengo en el programa (solo que a diferentes alturas, no todo exactamente uno debajo de otro).

Sucede que unicamente me copia los archivos de la carpeta raiz (donde tengo el .py), a la carpeta que selecciono.
Y lo que quiero, es que busque los archivos dentro de la carpeta misma donde esta la ruta, no se si me explico...

Pd: el testruta lo puse para intentar separar el codigo, y ir haciendo pruebas de donde estaba el programa en cada momento, y de donde buscaba archivos),

Todos los print que tengo, todos siempre me dan la ubicacion, y los archivos correctos de donde selecciono la carpeta (Intente en muchas carpetas y todo correcto)., pero al utilizar la funcion de moverarchivos desde el boton, quita el contenido de carpeta raiz, y se lo lleva a la carpeta nueva

Espero que se haya entendido y gracias de antemano


#20
Cita de: engel lex en 14 Mayo 2021, 20:47 PM
Hola! asumo que esto es python3, no se que estás armando pero usualmente sería algo como

Código (python) [Seleccionar]
from time import time
#....... codigo
fin_bloqueo = time() + 2
#.......
if time() > fin_bloqueo:
     hacer_algo()


Estoy intentando hacer un pequeño juego, y necesito que no se pueda pulsar / realizar una acción si se realizo previamente en un lapso de 2 segundos.