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 - DtxdF

#31
GNU/Linux / Re: Duda con /bin/false linux
3 Junio 2021, 18:33 PM
Hola @armBjorn

Usa mejor nologin(8), false se usa mayormente para retornar un número distinto de cero; nologin también lo hace pero su funcionalidad principal es lo que deseas.

~ DtxdF
#32
Scripting / Re: Py a Pdf
2 Junio 2021, 01:09 AM
Hola @Panic0

Si estás en *nix da igual la extensión. Puedes hacer cosas como estas:

Código (bash) [Seleccionar]
chmod +x ./main.pdf # Un script de python con extensión de un pdf
./main.pdf
# salida: Hello, world!


Si estás en Windows, la extensión solo importa para la mayoría de casos, pero invocar explícitamente el interprete con la ruta del script con una extensión no convencional, debería funcionar.


Si te refieres a un fichero, con formato PDF, pues no, no se va a poder.

~ DtxdF
#33
Scripting / Re: De txt a diccionario
1 Junio 2021, 02:10 AM
Cita de: tincopasan en 31 Mayo 2021, 01:43 AM
partamos de la base que la sintaxis visible del guardado es un asco,no hay comas para separa los items o salto de línea en el .txt

hay muchas formas de hacerlo:

Código (python) [Seleccionar]
#-*- coding: utf -8 -*-
with open("filename.txt", ) as archivo:
   cadena = archivo.read()

cadena=cadena.replace(']',']*').split('*')
datos = {}
for x in range(len(cadena)-1):
   temp = cadena[x].split(':')
   datos[temp[0]]= eval(temp[1])


y todo eso se podría evitar si guardas los datos como diccionario correctamente.

El problema con eval(...) es que ejecuta código arbitrario. Por ejemplo:

CitarImagen: ['.png', '.NEF', '.jpg', '.JPG', '.ao']Texto: ['.doc', '.pdf', '.cfg']Videos: ['.mp4', '.avi', '.flv']Otros: [__import__("os").system("whoami")]

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
#34
Windows / Re: Menu de atajos ya no funciona
31 Mayo 2021, 06:15 AM
¿El inconveniente ocurrió después de instalarlo? Si es así, desintale, reinicie y vuelva a intentar.

Editado:

También se podría iniciar en modo seguro e intentar, para no desinstalar nada.

~ DtxdF
#35
Windows / Re: Menu de atajos ya no funciona
31 Mayo 2021, 04:23 AM
Hola @Pedro122h

Intente verificar si es el mouse: invierta los botones, use otro mouse e incluso presione la tecla menú del teclado en alguna parte de alguna ventana o en el mismo escritorio.

Esto para descartar si es un daño en el mouse.

Véase Distribuciones de teclado personalizadas

~ DtxdF
#36
Hola @Arteaga1105

Hable con soporte técnico. Quizá, si proporciona buena información, puede recuperarla.

~ DtxdF
#37
Hola @Genesis_4

Usa Código GeShi (esto tiene que ver con la publicación en sí), para que la lectura de tu código en el foro sea amena.

Citar...también que el programa se detenga cuando digite el 0

Debes cambiar if (a < 0) (si el contenido que hace referencia la variable a es menor que 0) por if (a <= 0) (si el contenido que hace referencia la variable a es menor o igual a 0).

El problema es que estás lanzando la excepción y atajándola dentro del mismo Raiz y luego imprimiéndola, por lo tanto nunca impides que se llame al método mostrar_raiz(). Debes atajarla en la misma función main(), por ejemplo, y luego sailr.

Código (cpp) [Seleccionar]
#include<iostream>
#include<cmath>

using namespace std;

class Raiz {
   public:
      double a, b;
      Raiz(double a);
      void mostrar_raiz();
};

Raiz::Raiz(double a)
{
    if (a <= 0)
        throw "Debes de colocar un numero positivo";
    this->a=a;
    this->b=sqrt(a);   
}

void Raiz::mostrar_raiz()
{
    cout << "La raiz cuadrada de "<< a << " es: " << b << endl;
}

int main()
{
    cout<<"Programa que saca raiz cuadrada"<<endl<<endl;
    try {
        Raiz r(1);
        r.mostrar_raiz();
    } catch (const char *exp) {
        cout << exp << endl;
        return EXIT_FAILURE;
    }
   
    return EXIT_SUCCESS;
}


~ DtxdF
#38
Scripting / Re: De txt a diccionario
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
#39
Scripting / Re: De txt a diccionario
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
#40
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