Jump to content

Thanael

Pessoal da TecnoSpeed
  • Contagem de Conteúdo

    217
  • Ingressou

  • Última visita

  • Dias Ganhos

    28

Postagens postado por Thanael

  1. Olá @Jose Eugenio Ramos tudo bem? 

    Segue abaixo uma maneira mais prática para percorrer pelos arquivos pdf de uma pasta.

    import re
    import os
    # Caminho da pasta
    path = r'C:\Users\thanael.butewicz\Documents\documentos efetivacao'
    # Percorrer somente pelos arquivos .pdf
    for file in os.listdir(path):                  
        if re.search('pdf', file):                          
            print(file)

    Agora sobre a leitura dos arquivos e encontrar determinadas partes que você precisa, irei deixar alguns artigos que possam lhe ajudar. 

    Existem diversas bibliotecas para realizar isso, sugiro testar com alguma dos artigos acima, na lógica tu só precisará transformar o arquivo em uma string no python ai realizar as buscas nestas strings.

    Para realizar as buscas nas strings da para usar o metódo string.find(texto) que irá retornar a posição onde inicia o texto procurado. Segue abaixo um exemplo de uma maneira de realizar a obtenção disso.

    texto = 'nome: thanael linguagem: python'
    
    # Obter a posição onde inicia meu nome.
    inicio = texto.find('nome:') + 6 
    # Nome: retorna posição 0 , agora basta pular os caracteres desejados "Nome: " = 6 caracteres
    
    # Agora basta obter a posição final, ou seja até onde desejo obter
    fim = texto.find('linguagem') 
    
    # Basta usar o Slice agora ou seja obter o trecho que desejo
    nome = texto[inicio:fim]
    print(nome)

    Enfim esta é uma das varias formas que existem de realizar o processo que você deseja, espero que com estes exemplos e artigos você consiga realizar o que deseja. Além disso, também estou a disposição para lhe ajudar no que for necessário.

  2. Olá @ENSS tudo bem ? 

    Olhando aqui a documentação https://instaloader.github.io/module/instaloader.html consegui encontrar alguns pontos que lhe ajudem. 

    1° Para realizar somente o download das imagens será necessário você ajustar alguns parâmetros ali em seu código adicionando o parâmetro save_metadata = False, isso fará com que não seja baixado os arquivos .json.
    Também será necessário ajustar o parâmetro  post_metadata_txt_pattern  de None  para str() para não realizar o download dos arquivos .txt.

    Resumindo adicione esses dois parâmetros que coloquei abaixo no Instaloader ali do seu código 

    save_metadata=False,
    post_metadata_txt_pattern=str(), 


    2° Agora para limitar o número de download, não consegui encontrar nada sobre isso na documentação.... Uma sugestão seria fazer outro processo para deixar na pasta somente o número de processos que deseja... 

    Enfim espero que isso lhe ajude de alguma forma, caso contrário estou a disposição para lhe ajudar.

    • Ajudou! 1
  3. Olá @Pietro Lopes Eugenio tudo bem?

    Vamos lá, o input("texto") faz com que você receba o que o usuário digitar, porém você irá receber isso como um dado do tipo texto (str). Portanto será necessário converte-los para dados do tipo INT  segue um exemplo:

    x = int(input('Qual é a base: '))
    y = int(input('Qual é a altura: '))

    Segue abaixo um exemplo deste código funcionando.
     

    x = int(input('Qual é a base: '))
    y = int(input('Qual é a altura: '))
    
    area = x * y
    perimetro = x * 4
    
    print(f'Perimetro: {perimetro} \nÁrea: {area}')

    Espero que tenha resolvido sua dúvida, caso contrario estou a disposição 👍

    • Curtir 1
  4. Olá pessoal! sabiam que o PostgreSQL tem uma função muito útil chamada generate_series? Com ela, é possível gerar uma lista de valores em um intervalo especificado, ou seja, podemos criar intervalos de números e até mesmo datas. 

    Parece difícil ? Veja como é simples a Sintaxe para utilizar o generate_series

    SELECT generate_series(inicio, fim, passo);

    Podemos usar isso para obtermos intervalos de número e até mesmo intervalo de datas, trazendo por dia, semana, mês ou o que preferirmos.

    Para criar um intervalo de datas usando o generate_series, basta seguir o exemplo abaixo:

    SELECT generate_series('2023-01-01'::date, '2023-02-01'::date, '1 day'::interval);

    image.png

    Viu só como é simples utilizar o generate_series ? além disso esta é uma função muito útil que ajuda a aumentar o que você pode fazer em seus SELECTs 👍

  5. Olá @Umpaulistano tudo bem ?

    Vou lhe mostrar alguns exemplo de query para estas questões, mas vale salientar que como não conheço a base de dados pode ser que o resultado não seja o esperado, sugiro ajustar os nomes de colunas e tabelas para a sua base de dado.

    1) Escreva uma query que retorne a receita por nome do cliente, ordenada da maior para a menor.

    SELECT cliente, SUM(receita)
    FROM tabela
    GROUP BY 1
    ORDER BY 2 DESC

    2) Escreva uma query que retorne a receita por Filial entre os dias 01/01/2022 e 03/01/2022.

    SELECT filial, SUM(receita)
    FROM tabela
    WHERE 1=1
        AND dia >= date'2022-01-01'
        AND dia <= date'2022-03-01'
    GROUP BY 1
    ORDER BY 2 DESC


    3) Escreva uma query que retorne clientes que nunca efetuaram uma compra. 
    SELECT cliente
    FROM tabela
    WHERE 1=1
        receita ISNULL

     

    4) Escreva uma query que retorne somente clientes que tiveram receita maior que 10.000

    SELECT cliente
    FROM tabela
    WHERE 1=1
        receita > 10000

    5) Escreva uma query que retorne o primeiro pedido de cada um dos clientes.

    WITH dados as (
    SELECT cliente, pedido, RANK() OVER (ORDER BY cliente) FROM tabela
    )
    SELECT cliente, pedido
    FROM dados
    WHERE rank = 1

    Estes são exemplos de como realizar estes SELECTs, porém ressalto novamente que funcionará dependendo da estrutura do banco de dados, portanto pode ser que não funcione...
    Caso queira uma exatidão maior na resposta peço que envie um print sobre a estrutura das tabelas, que ai conseguirei lhe auxiliar com mais precisão 👍

    • Curtir 1
  6. Provável que assim como eu você já teve de criar gráficos em Python e utiliza-los em seus relatórios, para isso normalmente baixamos o PNG do nosso gráfico plotado com Python.

    O problema de exportar o gráfico em PNG é pelo fato dele perder a interatividade que as bibliotecas fornecem aos gráficos, principalmente o Plotly. 

    Veremos também a diferença entre um  

    gráfico sem estilização x gráfico estilizado com marcações nos valores.


    Mas como corrigir a perda de interatividade ao usar seus gráficos em formato de Imagem? Vou lhe mostrar uma maneira simples de resolver isso ao estilizar seus gráficos com Plotly.

    Para tornar mais simples de entender vamos utilizar o seguinte dataset simples, mostrando a distribuição do valor ao decorrer dos meses.

    image.png

    Iremos primeiro mostrar uma simples plotagem de um gráfico de linha com estes dados.

    import pandas as pd
    import plotly.express as px
    import plotly.graph_objects as go
    
    fig = px.line(df, x='data', y='valor', markers=True)
    fig.show()

    image.png

    Se você já conhece o Plotly, sabe que este é um gráfico interativo com ferramentas de visualização, mostrando os valores ao passar o mouse sobre eles. Porém se você precisar converter ele em imagem para adicionar em seus relatórios, ele perderá toda a interatividade...

    Para resolver isso vamos estilizar o gráfico e adicionar marcadores em seus valores. Tornando possivel visualizar seus valores através de uma imagem estática. 
     

    Estilização e Marcação em gráficos com Plotly

    Segue abaixo um exemplo do código de forma explicada sobre a adição de rótulos e como realizar um estilização simples ao gráfico.

    fig = px.line(df, x='data', y='valor', markers=True)
    # Adicionar os Marcadores - Rótulos 
    for index, row in df.iterrows():
        fig.add_annotation(
            x=row['data'],
            y=row['valor'],
            xref="x",
            yref="y",
            text = f"<b> {row['valor']} </b> ",
            font = dict(
                    family="Arial",
                    size=13,
            )
    )
    # Estilizar o gráfico   
    fig.update_layout(
                width=800, height=350,
                # Titulo
                title=dict(
                    text=f'<b>Faturamento 2022</b>',
                    x=0.5,
                    y=0.95,
                    font=dict(
                        family="Arial",
                        size=28,
                        color='#000000'
                    )
                ),
                # Eixo X
                xaxis=dict(
                    title="<b>Mês</b>",
                    titlefont=dict(
                        size=16
                    ),
                    ticklen=9,
                    tickmode='array',
                    tickvals=df['data']
                ),
                # Eixo Y
                yaxis=dict(
                    title="<b>Valor</b>",
                    titlefont=dict(
                        size=18
                    ),
                    ticklen=10,
                ),
        )
    # Mostrar o gráfico
    fig.show()

    image.png

    Veja como a estilização de um gráfico pode ser algo simples de realizar, basta escrever o código de forma comentada e simples de entender e você perceberá que a estilização de gráficos com Python não é um bicho de 7 cabeças.

  7. Olá @vgcordeiro vou lhe explicar uma forma que lhe sirva totalmente.

    Vou lhe explicar a teoria primeiro e um exemplo de código na prática. 

    Pensamos da seguinte forma, você necessita realizar esse processo N vezes ou seja para quantos arquivos você ter correto ? Portanto basta ao invés de fazermos um número fixo de LOOPs, obtermos a quantidade de arquivos e realizar a quantidade de Iterações referentes a quantidade de arquivos, vou lhe mostrar um exemplo.

    import os 
    
    path = 'C:\\Users\\thanael.butewicz\\Documents\\bokeh'
    
    for file in os.listdir(path):  
        print(file)

    Desta forma ele vai obter uma lista contendo o nome dos arquivos presente na pasta definido nessa variável criada.

     image.png
     

    Acredito que assim seu código irá funcionar independente do número de arquivos que existir na pasta 👍

    OBS: Lembre-se que no caminho é necessario passar o caminho todo, e usar \\ ao invés de \ caso contrario irá gerar um erro pois o \ é um caractere usado para formatar strings também.

    Enfim, testa ai e depois me diz se deu certo 😄

  8. Você já precisou obter a diferença entre duas datas, em segundos, horas, minutos ou até mesmo a quantidade dias entre duas datas ? Eu já precisei fazer isso diversas vezes, e em todas elas sofro para encontrar métodos práticos para resolver isso.

    Portanto para que você não tenha que passar por essa luta para encontrar como resolver isso, vou lhe mostrar uma forma muito simples de como realizar isso através do Python e da biblioteca Datetime que é uma mão na roda quando falamos de datas

    Então chega de enrolação e vamos colocar a mão na massa.

    import datetime
    
    # Vamos definir as duas datas
    agora = datetime.datetime.now()
    print(agora)          # 2023-01-23 21:15:43.482235
    data_aleatoria = datetime.datetime(2021,12,7,14,29,30,55)
    print(data_aleatoria) # 2021-12-07 14:29:30.000055
    
    # Vamos subtrair estas datas normalmente
    delta = agora - data_aleatoria
    print(delta) # 412 days, 6:46:13.482180
    
    # Agora basta obtermos a unidade de tempo que desejarmos 
    print(delta.total_seconds())        # 35621173.48218  Segundos
    print(delta.total_seconds() / 60)   # 593686.224703 Minutos
    print(delta.total_seconds() / 3600) # 9894.770411716667 Horas
    print(delta.days)                   # 412 Dias

    Simples assim!

    Realmente é muito simples, porém fácil de esquecer, portanto já salva este post em algum lugar, para sempre quando precisar lembrar como realizar isso. 

  9. Olá @Julio Cezar Barreto tudo bem?

    Sugiro dar uma olhada na documentação do read_excel este método pode precisar utilizar alguns parâmetros... Vou deixar aqui abaixo alguns artigos que possam lhe ajudar.

    Caso mesmo assim continue gerando erro, avisa aqui que procuramos outra forma de lhe ajudar. 👍

  10. Olá @vgcordeiro tudo bem ?

    Basta adicionar um FOR desta forma.

    for i in range(1,30):
      # adicionar seu codigo aqui.

    A grosso modo é isso, porém é bom se atentar se precisará que os valores alterem a cada iteração e tals.

  11. Olá @vgcordeiro tudo bem?

    Da uma olhada na documentação do os.rename, nele basta que passemos como parâmetros o nome do arquivo que desejamos renomear e o novo nome do arquivo. Portanto basta que usemos variaveis para isso.

    armazena o numero da nota fiscal numa variavel ai passa essa variavel para definir como nome.

    arquivo = 'teste.txt'
    
    nota = 'numero/nome da nota aqui'
    
    os.rename(arquivo, f"{nota}.pdf")

    Espero que isso lhe ajude, caso contrario estou a disposição

  12. Olá @Weime Dias acredito que basta você criar as funções para realizar a ação que irá funcionar normalmente caso sua assistente virtual seja um arquivo .py, caso seja uma aplicação web ou desktop ai aumenta a complexidade, sugiro pesquisar sobre envio e armazenamento de arquivos em servidor e disponibilização de arquivos na sua aplicação. 

    Infelizmente não possuo conhecimento em como realizar essas etapas, mas acredito existir muito conteúdo na internet sobre isso. 

    Espero que isso lhe de um norte de para onde seguir.

  13. Olá @kaique_910 tudo bem?

    Recomendo reinstalar ou rodar um upgrade nesta biblioteca especifica.

    pip install --upgrade seaborn

    caso mesmo assim persista este erro, procura pela versão mais estável desta biblioteca e realiza sua instalação.

    Espero que isso resolve seu problema, caso contrario estou a disposição para lhe ajudar.

  14. Olá @ENSS tudo bem?

    Vamos lá para entender o que aconteceu.


    Poderia me explicar brevemente o objetivo desta parte aqui

    not_found = list(ensure_index(key)[missing_mask.nonzero()[0]].unique())

    O erro está acontecendo em qual linha exatamente... nesta acima ?

    Pelo que estou vendo ele não esta conseguindo encontrar aqueles valores ali como colunas... Verifica os nomes das colunas se esta como texto mesmo, recomendo analisar novamente esse processo, as vezes algo passou despercebido....

    Infelizmente não consigo lhe dar uma resposta mais assertiva com as informações que estou vendo, talvez seja erro meu, mas se possível poderia explicar mais detalhadamente o que está tentando fazer no DataFrame que resultou neste erro, a partir dai acredito que conseguirei lhe ajudar de forma mais assertiva. 

  15. Olá @wesleyss29 tudo bem?

    Vish, nunca realizei isso via python. 

    Vou mandar uns artigos aqui que talvez possa lhe ajudar.


    Caso a ideia seja só copiar os dados de um banco sem levar em conta a criação das constraints e tudo mais, daria para fazer em um script python simples com pandas, algo como 

    import pandas as pd
    
    # obter os dados
    tabela = pd.read_sql('select * from tabela_teste', conexao_homologacao)
    
    # inserir no outro banco
    tabela.to_sql('tabela_teste', conexao_producao, if_exists = 'append', index = False)


    Espero que isso possa lhe ajudar, caso contrario fico a disposição para procurar outras formas de lhe ajudar. 

  16. Olá @pmourao segue abaixo duas maneiras de realizar isso

    Primeiro vamos criar o dicionario.

    favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
    'paulo': 'java',
    'marcel': 'java',
    'herminia': 'c#',
    'sara': 'ruby',
    'carlos': '',
    'jose': '',
    }
    • Maneira mais simples para entender
    nao_responderam = []
    for nome, linguagem in favorite_languages.items():
        if linguagem == '': 
            nao_responderam.append(nome)
            print(f'{nome} não respondeu a pesquisa')

    Desta forma ele irá printar quem não respondeu e também irá adicionar seus nomes a lista nao_responderam.

    • Maneira mais rápida. (mais complexa de entender)
    nao_responderam = [nome for nome, linguagem in favorite_languages.items() if linguagem == '']
    print(nao_responderam)

    Desta forma você também terá uma lista com o nome das pessoas que não responderam

    Enfim espero que seja isso que necessite. Qualquer dúvida estou a disposição.  👍

  17. Olá @Claudio Villar tudo bem?

    Então o \n é usado para indicar que ele deve pular a linha quando você printar o texto.

    Na teoria ele deveria ter pulado a linha, acredito que para resolver isso tu deverá pesquisar algo sobre essa quebra de linha com a API do WhatsApp. Pesquisei brevemente sobre isso encontrei algo como:

    "Sim, você deverá usar \n para quebrar o texto. Porém, a sanitização vai retirar o \n e o ?, o que vai criar um resultado não esperado."
    "Para resolver o problema, basta você converter o texto para URL Encode. No javascript, por exemplo, ficará assim:"

    Vou lhe mandar o site no qual encontrei isto, espero que lhe ajude. 👍

    • Curtir 1
  18. Olá @Luis Antonio tudo bem?

    Da uma pesquisada no método pd.read_excel do pandas, sempre que preciso ler dados de uma planilha, eu uso ele para trazer todos os dados da planilha, ai a partir disso eu trabalho com esses dados no Python.

    Segue abaixo alguns links que possam lhe ajudar.

    Espero que isso lhe ajude, se mesmo assim não conseguir avisa aqui para que possamos pensar em outra solução. 👍

  19. Já pensou em obter a conversão de moedas em tempo real através do Python ?
    E o mais importante de forma simples e prática?
    Sem precisar de nenhum conhecimento avançado.

    Ao decorrer deste tópico vou lhe mostrar como realizar isso agora mesmo.

    Portanto pega seu caderno e já começa a anotar ✍️

    Para realizar essa função iremos utilizar uma API Free disponível na web chamada de AwesomeAPI, "mas Thanael você falou que não precisava de nenhum conhecimento avançado e agora vem falando de API já".🤚 Calma, API não é um bicho de 7 cabeças.
    Além disso não iremos desenvolver uma API do zero, iremos somente utilizar uma API já pronta.
    Para facilitar sua compreensão sobre consumo de APIs, vamos pensar em API como funções prontas que alguém já desenvolveu, portanto só precisamos descobrir como usa-las semelhante a uma biblioteca qualquer do python, a diferença e que não precisamos baixar nada pois elas já estão disponíveis na web.

    Sendo assim vamos agora colocar a mão na massa!

    import requests       # Biblioteca para trabalhar com requisições 
    import json           # Biblioteca para transformar a resposta da requisição em um dicionario Python
    
    def cotacao(moeda):
        url_api = f'https://economia.awesomeapi.com.br/last/{moeda}'   # URL da API passando o parâmetro
        req = requests.get(url_api)                                    # Realizar o Request
        
        return json.loads(req.content)                                 # Transformar em dicionario
      
    cotacao('USD-BRL')

    FIM! Exatamente, é somente isso de código,  muito simples e prático.

    Pois assim como falei nós só estamos usando uma solução já disponível na web (API), portanto é bem mais simples do que desenvolver de fato a API.

    Perceba no código que na linha da variável url_api é onde chamamos a API, ou seja enviamos para a API um parâmetro no caso a moeda que desejamos e ela irá nos retornar o resultado já pronto. Simples assim!

    Veja o resultado!

    image.png

    OBS: E mesmo se tu acabar passando os parâmetros errados por exemplo 'UCSA-BRL' (UCSA não existe), a própria API vai lhe retornar uma mensagem dizendo que a moeda digitada não foi encontrada.

    image.png
     

    Muito simples este processo não acha, ai com os dados já em mãos basta realizar o que quiser com eles.

    Uma dica muito importe é sempre ler a documentação da API, neste caso especifico acesse a AwesomeAPI/-api-de-moedas nesta documentação você encontra as moedas que a API fornece conversão, mensagens de erros, legenda dos campos, passo a passo de como usa-la, entre muitas outras informações. 
     

    Espero que esse tópico consiga lhe ajudar no seu aprendizado em Python e tire um pouco do medo que a palavra API gera nas pessoas hahaha 😱, ao decorrer do tempo você percebe que usar APIs é mais simples do que pensa. 😄 👍

  20. Olá @lucasandrade tudo bem?

    Uma maneira simples de lidar com esses casos onde existem letras maiúsculas e minúsculas e transformar tudo em uma coisa só, exemplo transformar tudo em letras minúsculas usando o string.lower( ). Segue abaixo um exemplo de como realizar isso. 

    lista_usuario=['Gabriel','Rafael','Juca','Toreto','Brian','Nick','Lucas']
    novo_usuario=['lucas','Cesar','Rodrigo','Toreto','Robson','Alberto','Tiao']
    
    lista_usuario = [usuario.lower() for usuario in lista_usuario]
    print(lista_usuario) # ['gabriel', 'rafael', 'juca', 'toreto', 'brian', 'nick', 'lucas']
    novo_usuario = [usuario.lower() for usuario in novo_usuario]
    print(novo_usuario) # ['lucas', 'cesar', 'rodrigo', 'toreto', 'robson', 'alberto', 'tiao']

    Deste modo basta agora realizar a verificação normal igual você já fez

    for usuario in novo_usuario: 
        if usuario in lista_usuario:        
            print(f"\nNome de usuario {usuario.title()} ja existe! \n ")
        else:        
            print("Seja bem vindo " + usuario.title() + ".")

    Exemplo de sáida.

    image.png

    Obs: Adicionei o .title( ) que serve para transformar a 1° letra da string em maiúscula, achei melhor já que se trata de nomes haha 😅

    Enfim espero que seja isso que você precise, caso contrario estou a disposição para lhe ajudar no que precisar 👍

×
×
  • Create New...