Ir ao conteúdo
  • Cadastre-se

Kamuri

Membro Pleno
  • Posts

    217
  • Cadastrado em

  • Última visita

posts postados por Kamuri

  1. A primeira vai depender do algoritmo implementado por cada sistema, já que você está chamando comandos do sistema. Na minha opinião ela deve ser a mais rápida, já que a segunda é implementada apenas em Python e a linguagem é conhecida por ser lenta.

    Se você quiser, pode usar também a função copy da lib shutil. Ou olhar a implementação: https://github.com/python/cpython/blob/main/Lib/shutil.py#L230

    • Amei 1
  2. 2 horas atrás, Arthur Guillermo disse:

    assim não teria que ficar executando toda vez o client

    Nesse caso, só separando seu código em vários pedaços independentes. Isso que você quer é chamado de "hot reload" ou "hot replacement".

    Você pode tentar algumas coisas:

    Separar seu projeto em varios pedaços, ou seja, um servidor rodando seu Client expondo a API para ser acesso por outros.

    Ou tentar integrar o node-hot-loader no seu projeto.

     

    • Curtir 1
    • Obrigado 1
  3. Bom dia! Aqui você pega o "value" do elemento selecionado, que retorna uma string:

    Em 24/01/2024 às 11:25, Davi7 disse:
    let numero = (document.querySelector("#numero") as HTMLInputElement).value

    Mas o constructor da sua class espera um HTMLInputElement, por isso o erro. Então ou você muda o tipo no constructor pra string, ou não pega o value do HTMLInputElement antes de passar pro constructor.

    • Amei 1
  4. Em 29/01/2024 às 19:38, ca_mauricio disse:

    Quanto menos variáveis usar menor memória utiliza

    Não é verdade! Você precisa entender antes como a linguagem e o ambiente de exeução lidam com as variáveis. Em linguagens compiladas, o compilador geralmente é esperto o suficiente para retirar as variáveis inúteis, por ex.

     

    Em Python, as vezes as variáveis compartilham o mesmo endereço em memória pra um valor, por ex, todos os números de -5 a 256 já estão em memória. Quando você usa algum número nesse intervalo o interpretador do CPython já pega um valor alocado. Todavia, para números maiores, ele cria um novo objeto.
    O mesmo com strings, tipo, se você definir duas variáveis com strings iguais o endereço de memória delas vão ser o mesmo! Então independente de quantas variáveis você criar, o uso de memória permanece o mesmo.

     

    Fora que é boa prática evitar "valores mágicos", isso atrapalha o desenvolvimento, principalmente se mais de uma pessoa estiver trabalhando no projeto. Você sempre pode adicionar comentário, mas na minha opinião é melhor ter um código claro e limpo do que um código cheio de comentários para explicar coisas simples.

    • Curtir 1
    • Amei 1
  5. @SwallsRealmente, o PyPDF2 é melhor pra editar PDF, pra criar você precisa de conhecimento prévio de como PDFs funcionam. Você pode tentar usar o reportlab, outro modulo pra criação de PDF, tipo:

     

    import os
    from reportlab.lib.pagesizes import A2
    from reportlab.pdfgen import canvas
    
    def convert_to_pdf(folder_path):
        arquivos = [os.path.join(folder_path, nome) for nome in os.listdir(folder_path)]
        arquivos = sorted([x for x in arquivos if "para_pdf" in x])
        for arquivo in arquivos:
            output_name = arquivo[:-4] + ".pdf"
            pdf_path = os.path.join(folder_path, output_name)
            c = canvas.Canvas(pdf_path, pagesize=A2)
    
            with open(os.path.join(folder_path, arquivo), 'r', encoding='utf-8') as file:
                content = file.read()
    
            c.setFont("Helvetica", 12)
            lines = content.splitlines()
            y = 750
            for line in lines:
                c.drawString(30, y, line)
                y -= 20
            c.showPage()
            c.save()
            print(f"PDF file saved at {pdf_path}")
    
    
    convert_to_pdf(".")

     

    • Amei 1
  6. Deixa eu ver se entendi:

     

    Você quer um script que receba um caminho como argumento e apague o arquivo?

     

    Se for, é fácil:

     

    (_os := __import__("os")) and (_sys := __import__('sys')) and (filename := _sys.argv.pop(-1)) and (exit(1) if filename == _os.path.basename(__file__) else "") or (_os.remove(filename) if _os.path.isfile(filename) else print("Arquivo não existe"))

     

    Resultado:

     

    ❯ echo "test" > /tmp/test
    ❯ cat /tmp/test
    test
    ❯ python test.py /tmp/test
    ❯ cat /tmp/test
    cat: /tmp/test: Arquivo ou diretório inexistente

     

    Codigo legivel:
     

    import os
    import sys
    
    filename = sys.argv.pop(-1)
    if filename == os.path.basename(__file__):
        exit(1)
    if os.path.isfile(filename):
        os.remove(filename)
    else:
        print("Arquivo não existe")

     

    voce consegue expandir isso pra qualquer pasta ou arquivo.

    • Amei 1
  7. Não consegui identificar o erro, sem uma amostra dos arquivos fica difícil simular o erro. Todavia, você pode testar o seguinte:

    • Use o PyPDF2 ao invés do FPDF. Tem 6 anos desde a ultima commit no FPDF, enquanto a ultima commit no PyPDF2 foi semana passada, o que mostra que o projeto está ativo e sendo constantemente melhorado.

    Se não conseguir, tenta criar alguns arquivos de teste pra facilitar.
    Ps: texto = "".join(f.readlines()) pode ser substituido por f.read()

    Edit:

    Usando uns arquivos aqui, o que consegui foi uma linha por página. O problema está na linha 14 (pdf.multi_cell(10,10,texto,border=True)). A distancia de linha para linha é muito grande. Se o arquivo tiver varias linhas em branco você vai ter muitas paginas em branco.

    Tenta:

    pdf.multi_cell(15, 0.2, texto, border=True)

     

    • Amei 1
  8. Você precisa dar permissão ao seu host no banco de dados criando um usuário global ou especificando o host. Ex:

     

    -- Mysql >= 8
    CREATE USER 'root'@'%' IDENTIFIED BY 'password';
    GRANT ALTER ROUTINE, ALTER, SHOW VIEW, SHOW DATABASES, SELECT, PROCESS, EXECUTE ON . TO 'root'@'%'; 
    
    
    -- Mysql < 8 ou MariaDB 10.X
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

    Isso vai criar um usuario global com permissão de acesso de qualquer host.

    • Curtir 1
  9. São várias perguntas em uma. Vamos com calma.

    Em Python, listas são definidas como:

    typedef struct {
        PyObject_HEAD
        Py_ssize_t ob_size;
    
        /* Vector of pointers to list elements.  list[0] is ob_item[0], etc. */
        PyObject **ob_item;
    
        /* ob_item contains space for 'allocated' elements.  The number
         * currently in use is ob_size.
         * Invariants:
         *     0 <= ob_size <= allocated
         *     len(list) == ob_size
         *     ob_item == NULL implies ob_size == allocated == 0
         */
        Py_ssize_t allocated;
    } PyListObject;

    No caso, listas em python são arrays com tamanho dinâmico, quando um objeto é adicionado na lista, internamente um pointer (referencia para objeto) é criado nessa lista apontando para o objeto.

    Quando você aplica o método str(), você está chamando a função __str__ da classe, caso ela não tenha, ele tenta usar o __repr__. Ou seja, a classe não está sendo convertida para string, ela está enviando para o método o modo como ela é representada (isso cabe ao programador decidir). Dá print em [3].__str__() e você vai ter como resultado '[3]'.

    Sobre referenciar objetos com outras variaveis, Python já faz isso naturalmente.

    Ex:

    >>> x = 3
    >>> y = 3
    >>> id(x)
    140389809553712
    >>> id(y)
    140389809553712

    O endereço dos dois objetos são o mesmo, ambos são os mesmos objetos, isso é parte da definição do Python. E se você incluir qualquer um dos dois objetos acima, eles continuarão tendo o mesmo endereço, pois a lista vai apenas apontar para eles.

    Já tipos imutáveis, como tuplas e strings, ocorre algo diferente. O endereço deles sempre vai mudar para evitar que o valor seja alterado. Ex:

    >>> id("ax")
    140389808254128
    >>> id("ax")
    140389808254256

    E como são objetos imutáveis, não há como pegar o endereço deles e usar em outra parte. Deve ate ter algum método obscuro, mas no mínimo você vai acabar tendo um undefined beheavior.

     

    Ps: Para fazer cópias de objetos mutáveis como listas, use o copy.deepcopy.

    • Obrigado 1
  10. @Swalls Ele fez um match pra valores na string. Por exemplo:

     

    21 horas atrás, Swalls disse:
    &records="^2256$|^2257$|^2258$|^2259$|^2260$|^2261$|^2262$|^2263$|^2264$|^2265$|^2266$|^2267";

    Verifica se a string é exatamente um numero entre 2256 e 2267.

    Isso pode ate ser diminuido para algo como:

    ^22[5-6][0-7]$

    Que faz a mesma coisa.

    Regex (regular expression, expressão regular) é uma sequencia de caracteres usada pra identificar um padrão num texto. não e especifico de uma unica linguagem, pode ser usada com Python pelo modulo re, por exemplo. Ja no NodeJS, regex faz parte da definiçao da lingaugem e pode ser usado nativamente sem nenhum modulo.

    Quando eu tava iniciando com regex, usei o https://regexr.com/, tem varios exemplos bons la você ainda pode testar seus regex.

    • Obrigado 1
  11. 3 horas atrás, Swalls disse:

    é exatamente isso, se é possível um "match" reconhecer vários valores em uma única váriavel e se existir entre esses valores alguma correspondência retornar True se existir.

    Agora entendi.

    Você pode usar isso:

    /(pessoa|person|人間|ningen|human)/gi

    É um set que vai capturar grupos de caracteres com e no final as flags g (global) para pesquisar no texto inteiro e i para tornar a pesquisa case insensitive (tanto faz maiusculas e minusculas)

     

    > x = /(pessoa|person|人間|ningen|human)/gi
    /(pessoa|person|人間|ningen|human)/gi
    > x.test("pessoa")
    true
    > x.test("aogioanpessoa")
    true

    Teste feito com nodejs

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!