Jump to content

Thanael

Pessoal da TecnoSpeed
  • Contagem de Conteúdo

    217
  • Ingressou

  • Última visita

  • Dias Ganhos

    28

Postagens postado por Thanael

  1. @sirsmart é possivel sim segue abaixo o código.

    import os
    import datetime
    import pandas as pd
    
    # Pasta dos arquivos 
    caminho = '/home/ec2-user/etls/'
    
    # Obter todos os arquivos da pasta
    files = os.listdir(caminho)
    files.sort()
    
    # Teremos uma lista com todos os arquivos .txt
    dict_arquivos = {
        'file': [],
        'created_at': []
    }
    
    for file in files:
        #Verificar se é TXT
        if '.txt' in file: 
            # Obter a data de criação em timestamp e converter para Date
            timestamp = os.path.getmtime(f"{caminho}{file}")
            created_at = datetime.datetime.fromtimestamp(timestamp).date()
            
            # Alimentar o Dicionario
            dict_arquivos['file'].append(file)
            dict_arquivos['created_at'].append(created_at)
    
    # Criar o DataFrame com esses dados
    df_file = pd.DataFrame(dict_arquivos)
    
    # Ordernar os dados pela data de criação
    df_file = df_file.sort_values(by =['created_at'])

    image.png

    Essa foi a forma que construí aqui o algoritmo, lembrando que há formas mais rápidas, mas essa foi a que consegui nesse tempo, espero que lhe ajude.

    Artigo consultado para obter a data de criação: Python Get File Creation and Modification DateTime

    Espero que seja isso que precise, caso contrario estou a disposição para ajudar.

    • Curtir 1
  2. Quando é obtido todos os arquivos da pasta. Usamos o sort( ) para ordenar os arquivos se não me engano por ordem alfabética (A até Z, a até z) algo assim.

    Ai ao usar o FOR ele irá percorrer por cada registro na ordem dos índices do FOR ou seja na ordem que o SORT retornou (Alfabética)

    Essa parte aqui do código

    import os
    
    # Pasta dos arquivos 
    caminho = '/home/ec2-user/etls/Testes_Wiki/'
    
    # Obter todos os arquivos da pasta
    files = os.listdir(caminho)
    files.sort()
    
    # Teremos uma lista com todos os arquivos .txt
    arquivos_txt = [file for file in files if '.txt' in file]
    
    print(arquivos_txt)

    Se você olhar o print dessa lista (arquivos_txt) é nesta ordem que iremos ler os arquivos.

  3. Olá @sirsmart tudo bem ? 

    Existe uma maneira simples de realizar isso dependendo do conteúdo dos arquivos. Mas basicamente você precisará realizar duas etapas

    • Navegar pelos Arquivos
    • Armazenar os dados dos arquivos

    Segue abaixo um exemplo de código

    import os
    
    # Pasta dos arquivos 
    caminho = '/home/ec2-user/etls/Testes_Wiki/'
    
    # Obter todos os arquivos da pasta
    files = os.listdir(caminho)
    files.sort()
    
    # Teremos uma lista com todos os arquivos .txt
    arquivos_txt = [file for file in files if '.txt' in file]
    
    # Uma string para armazenar todos os outros arquivos
    all_data = ''
    
    for txt in arquivos_txt:
      	# Ler o arquivo
        data = open(caminho + txt, "r")
        
        # Armazenar os dados
        all_data += f"Arquivo: {txt} \nDados: {data.read()}.  \n\n"
    
    print(all_data)
      

    image.png

    Espero que seja isso que precise, caso contrario estou a disposição para ajudar.

  4. Olá @MTL.

    Aparentemente por se tratar de um botão simples basta tu acessar ele via Selenium e usar o "Click" que ele irá clicar no botão é expandir a visualização normalmente.

    Isso para o caso de estar fazendo seu WebScrapping através Selenium, caso esteja usando o BeaultifulSoup ai não funcionara pois ele pegará o HTML estático sem poder fazer interações com o site em si.

    Se puder comentar sobre seu código, quais bibliotecas esta usando. Vai facilitar bastante para lhe auxiliar. 

    • Curtir 1
  5. Olá @sirsmart tudo bem?

    Consegue mandar a mensagem de erro que está recebendo ? 

    Olhando seu código não encontrei aonde foi definido a variável data... Julgo que seria algo como 

    data = pd.DataFrame()

    Se for isso quando realizar o data += resultado isso não irá funcionar... sempre que precisar por exemplo adicionar a cada iteração dados nesse DataFrame recomendo o seguinte.

    data = pd.DataFrame()
    
    while:
    	....
    	....
    	data = pd.concat([data, resultado], ignore_index=True)
       
    data.to_excel("testeapi.xlsx", index=False, sheet_name='Dados')

    Utilize o pd.concat ao invez do +=, testa alterar e diz se deu certo seu código.

    Espero que isso resolva o que está tentando realizar.

    • Amei 1
  6. Olá @MTL tudo bem ?

    Recentemente precisei fazer um scrapping num site assim, essas parte de expandir consistia num <select> verifica no HTML se esse botão está dentro de algum select, caso for basta pesquisar como navegar pelos SELECT com o Selenium.

    Caso esteja usando o Selenium, ele tem uma documentação bem robusta que pode te auxiliar.

    Exemplo: Trabalhando com elementos select

    Segue abaixo outros links que podem lhe ajudar

    How to click an Expand button to open a section using Selenium Webdriver C#

    Espero que isso lhe ajude, caso contrário estou a disposição
    (Se puder enviar um print do HTML mostrando o código HTML e um mostrando a interface do Botão pode ser que ajude também)

    • Amei 1
  7. Boa tarde @sirsmart.

    Isso ocorre pelo motivo da coluna project ser uma coluna do tipo OBJECT (JSON) ou seja ela armazena mais registros, por conta disso irá armazenar desta forma mesmo no Excel.

    Para resolver isso precisará "Desmontar" todas essas colunas que armazenam jsons, o ideal é ir utilizando o pandas.json_normalize até não ter mais registros desta forma em seus dataframe.

    • Curtir 1
  8. Pela imagem, essa coluna está trazendo a lista de registros, uma forma de tratar ela é transformando a lista em um novo DataFrame (haha) 

    Segue abaixo uma ideia de código.

    df_principal = pd.DataFrame()
    
    for index, row in df.iterrows():
    	# Criar o DataFrame desta lista	
    	df_row = pd.DataFrame(row['statusHistory'])
    	# Adicionar as colunas do DF principal a este novo	
    	df_row['id'] = row['id']
    
    	# Juntar ao DF principal
    	df_principal = pd.concat([df_principal, df_row], ignore_index=True)
    	

    Em resumo a lógica e percorrer pelo DF principal, criar um novo DataFrame do statusHistory de cada linha e juntar tudo isso num dataframe.

    Espero que isso lhe auxilie de alguma forma.

    • Amei 1
  9. Poderia me dar um exemplo desta coluna "statusHistory" ? Pois para funcionar ali ela precisará ser um OBJECT (JSON). 

    Aparentemente a coluna statusHistory é uma coluna STR portanto a forma de trazer isso é diferente. (Pode usar varias alternativas dependendo da estrutura da coluna)

    • Curtir 1
  10. Ótimo, segue abaixo algumas formas de acessar os dados dela.

    • pd.json_normalize
      Pode usar mais um pd.json_normalize para obter os dados dela e transformar em outro dataframe.
       
    • Criar as colunas através do Apply
      Criar as colunas de dentro deste "project" via apply.Exemplo
      df['project_name'] = df['project'].apply(lambda row: row['name'])
      df['project_category'] = df['project'].apply(lambda row: row['category']['name'])

    Tenta realizar esse exemplo do apply que mandei, provavelmente ele resolva seu problema.

    OBS: Pode ser necessário adicionar umas tratativas (ifs) caso existam dados nulos por exemplo. Ai basta usar IF ternário caso necessário.

    • Curtir 1
  11. Bom dia @sirsmart tudo bem ?

    Pelo que estou observando na sua estrutura você transformou o arquivo todo em um DataFrame... Sabendo que o campo issues possui dentro dele os dados você não conseguirá acessa-los facilmente como pretende atravês deste DataFrame principal.

    Solução

    • Criar o DataFrame direto com os dados de issues
      A maneira mais prática de trabalhar com os esses dados e criar o DataFrame somente com os dados do issues, exemplo
      • Converter o JSON em DICT atravês da lib json e criar o dataframe direto dos dados de issues
        df = pd.DataFrame(json_dict['issues'])
      •  
      • Usar o pd.json_normalize para criar o DataFrame com os dados do issues
        df_inicial = pd.read_json('arquivo.json')
        
        df = pd.json_normalize(df_inicial['issues'])

    Sugiro testar uma das duas alternativas e dizer se funcionou. Caso contrario estou a disposição para lhe auxiliar.

    • Curtir 1
  12. Olá @bobneo4 tudo bem ?

    Vamos lá, em relação a esses passos iniciais (1,2,3) não tenho muito conhecimento se é possível realizar isso com Python. Já realizei automações de navegar automaticamente pelo site e etc, porém identificar as ações de um usuário em um determinado site, pode ser bem mais complexo. 

    Vou deixar abaixo algumas alternativas para realizar isso

    • Desenvolvedor do Site
      Caso você seja o desenvolvedor do site, você conseguirá realizar essas ações de identificar as ações do usuário.
    • Webhooks
      Muitos serviços online atualmente fornecem o envio de informações via WebHook, no qual quando um usuário realizar determinada ação o site vai enviar os dados da ação para uma URL definida (Geralmente você precisará levantar uma API para receber esses dados) 

     

    Em relação a levar as informações para uma planilha (Google Sheets) isso você consegue realizar tranquilamente via Python e existe muito conteúdo na internet para auxiliar nisso. 

     

    Espero que isso possa lhe auxiliar de alguma forma, caso contrário estou a disposição para ajudar no que for possível. 

    • Amei 1
  13. Bom dia @Gustavo Kasprowicz tudo bem ?

    Que estranho isso 🤔, acabei de rodar a instalação e o import aqui é foi normal...

    Aparentemente esse seu problema ai ocorre devido a você não ter permissão para instalar as bibliotecas. Segue abaixo um artigo onde uma pessoa teve o mesmo problema How to resolve "normal site-packages is not writable" in Python e/ou pip/python: normal site-packages is not writeable

    Algumas soluções

    • Criar ambientes virtuais  (virtualenv)
       
    • Caso você use linux pode estar tentando "forçar" a instalação através do comando.
      sudo apt install python-package-name  # for apt package manager
       
    • Especificar o usuario na instalação através do
      pip install package-name --user

    Creio que a solução mais adequada seja usar o seguinte comando no CMD na hora de instalar.

    python3 -m pip install [package_name]
    #ou
    python -m pip install [package_name]
    
    # Exemplo
    python -m pip install xmltodict

    Sugiro testar e após isso comentar aqui se funcionou, caso não funcione procuramos outra solução. 

    • Curtir 1
    • Amei 1
  14. Olá @Endel Naiva tudo bem ?

    Recentemente realizei alguns estudos testando o Selenium e tive um problema bem semelhante, por conta de não ter instalado o WebDriver do Chrome na máquina...

    Porém existe uma maneira simples de contar isso via código. 

    Segue abaixo a forma com a qual eu configuro o Selenium nos meus scripts, sugiro testar ela e ver se deu certo.

    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.chrome.options import Options
    from webdriver_manager.chrome import ChromeDriverManager
    
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.select import Select
    from selenium.webdriver import ActionChains
    
    import pandas as pd
    
    options = Options()
    options.add_experimental_option("detach", True)
    
    # Aqui ele instala o WebDriver toda vez
    driver = webdriver.Chrome(service = Service(ChromeDriverManager().install()), 
                              options = options)
    
    # A partir daqui usar normal como preferir
    driver.get('https://statusinvest.com.br/acoes/smto3')
    time.sleep(2)

    Sugiro testar com esse código, caso mesmo assim não funcione, peço que me envie as mensagens de erro para podermos lhe auxiliar novamente. 

    • Amei 2
  15. Olá @maxvitola tudo bem?

    Possivelmente isso pode estar ocorrendo devido a sua versão do Python, poderia comentar aqui qual versão está utilizando (Basta rodar python --version no CMD)

    Pesquisando sobre este seu problema me deparei com este artigo. Could not find a version that satisfies the requirement tensorflow (StackOverflow)

    Em resumo no caso da pessoa ali ela tinha o Python 3.6 e o TensorFlow não suportava essa versão...

    Possíveis Soluções.

    • Atualize seu Python (Tutorial de como realizar isso)
    • Utilizar outro caminho para obter a biblioteca.
      No caso do problema ali foi instalado a biblioteca via comando.
      pip install https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.8.0-py3-none-any.whl

       

    Espero que isso solucione seu problema caso contrario estou a disposição para lhe auxiliar.

    • Amei 1
  16. Olá @lhnask tudo bem ?

    Nunca utilizei essas bibliotecas mas pelo erro que comentou de "FileNotFoundError: [WinError 2] " significa que a biblioteca de transcrição não está achando o arquivo.

    Segue abaixo o que pode estar acontecendo.

    • No momento de passar o caminho do arquivo sugiro passar o caminho completo sempre.
      Exemplo
    # ao invez de usar arquivo.wav use
    file = r"C:\Users\thanael.butewicz\Documents\arquivo.wav"
    #ou
    file = "C:\\Users\\thanael.butewicz\\Documents\\arquivo.wav"

    Sugiro sempre usar o caminho completo, sanou muitos problemas que tive semelhante a isso. 

    Tenta realizar o teste ai comenta se deu certo ou se esse continuou para buscarmos outra possível solução.

    • Curtir 1
  17. Saquei, para colocar os 3 arquivos JSONs no mesmo DataFrame o ideal é que exista uma relação entre eles, seja por meio de algum ID, data ou outro dado.

    Consegue mandar um exemplo da estrutura deles para termos uma noção, ou melhor ainda mandar 3 arquivos JSOns similares a esses (Pode ocultar os dados se preferir)

    Tendo conhecimento da estrutura dos arquivos fica mais fácil visualizar a relação e criar o DataFrame todo junto por meio de um pd.join ou até mesmo usando o pd.melt.

    • Amei 1
  18. Olá @Dev c4puz tudo bem?

    Se puder me explicar onde exatamente esta com dificuldade vai facilitar para que eu possa lhe auxiliar.

    Com base nisso em qual ponto está com dificuldade ?

    • Realizar o download das imagens do Instagram ?
    • Criar a interface via Tkinter ? 

    Caso o código esteja gerando erro também fique a vontade para colocar as mensagens de erro que apresentam, tendo essas informações vou conseguir lhe auxiliar de forma mais assertiva. 👍

  19. Olá @sirsmart tudo bem ?

    Poderia explicar um pouco mais a fundo como precisa desses arquivos no excel ? 

    Lembrando que você precisará primeiro ler esses arquivos JSON, recomendo utilizar o Pandas para isso. (pd.read_json)

    Segue abaixo algumas dúvidas que tenho para conseguir lhe auxiliar melhor.

    • Sobre os arquivos JSON, deseja que cada um deles fique em uma aba da planilha excel ? 
      Caso seja isso segue abaixo um tópico explicando como resolver isso.  Salvar DataFrame em abas no arquivo Excel.
       
    • Salvar os arquivos JSON na mesma ABA ?
      Ai na teoria você precisará juntar todos os arquivos JSON em um mesmo DataFrame. Lembrando que pode ter o dificultador de precisar de uma ligação entre eles.

    Com essas informações vou conseguir lhe auxiliar mais assertivamente. 

    • Amei 1
  20. Olá @Milton tudo bem ?

    Não consegui entender muito bem sua dúvida, poderia me explicar qual o erro ou a situação ?

    Pelo que aparenta você não está conseguindo ler os dados do arquivo excel da forma correta é isso ? Caso seja isso sugiro que façamos o seguinte.

    • Envie uma imagem contendo a estrutura dos dados do Excel (Pode deixar os valores riscados no print)

    Provavelmente será necessário somente ajustar a forma que lemos esse arquivo no excel adicionando algum parâmetro a mais na função pd.read_excel( ) como por exemplo nome da Aba, intervalo de celular entre outros possíveis parametros.
    (Perceba que seu DataFrame está vindo dentro de um dicionario na key Planilha1, testa selecionar ele assim df['Planilha1'] que provavelmente funcionará na estrutura correta.)

    Vou deixar abaixo a documentação do pd.read_excel( ) sugiro verificar os possíveis parâmetros que podem ser passados. 

    De certa forma estou a disposição para auxiliar no que for preciso.

    • Amei 2
  21. Bom dia @Davi L., tudo bem?

    Segue abaixo um exemplo de como realizar essa manipulação de dados.

    • Formatar a data pro formato Brasileiro (dia/mes/ano)
    import datetime
    
    df['data'] = df['data'].apply(lambda data: data.strftime('%d/%m/%Y'))

    OBS: Lembrando que o campo de data precisa ser uma data (datetime) e após essa alteração ele se tornará String... 

     

    • Valor monetário em Real
      Não entendi muito bem o que pretende fazer, mas segue abaixo um exemplo de como transformar esse valor em uma string na forma de real R$ xxxx,xx
      df['valor'] = df['valor'].apply(lambda real: f'R$ {real:.2f}'.replace('.', ','))

    Ao final teremos o DataFrame com essas colunas da seguinte forma.

    image.png

    Lembrando que ao realizar essas alterações as colunas se transformam em String, portanto não funcionarão mais como coluna de data ou de número.

    Espero que seja isso que esteja precisando caso contrario estou a disposição para auxiliar no que for preciso. 👍

    • Amei 1
  22. Olá @mental_katsu tudo bem?

    Na ultima vez que usei o pyautogui tive o mesmo problema, não encontrei o motivo de não ter funcionado, sugiro verificar a documentação.

    Lembro que na época eu usei o hold( ) como alternativa 😅. Algo semelhante ao exemplo abaixo.

    #Usando Hold
    with pyautogui.hold('ctrl'):
            pyautogui.press(['alt', 't'])
        
    # Usando keydown e KeyUp
    pyautogui.keyDown('ctrl')
    pyautogui.keyDown('alt')
    pyautogui.keyDown('t')
    pyautogui.keyUp('t')
    pyautogui.keyUp('alt')
    pyautogui.keyUp('ctrl')

    Sugiro ir testando essas outras alternativas que realizam a mesma função.

    Espero que isso lhe ajude caso contrario estou a disposição para ajudar. 👍 

    • Curtir 2
  23. Olá @Douglas Michel Reis tudo bem? 

    Quando eu preciso realizar essas atividades geralmente utilizo a biblioteca Pandas para consultar, manipular e inserir dados nos respectivos banco de dados.

    Na teoria isso que está tentando fazer não deveria demorar, vou lhe mandar uma estrutura de código para realizar isso ai você testa.

    from sqlalchemy import create_engine # Criar a conexão com o PostgreSQL
    import pyodbc
    import pandas as pd
    
    # Criar as conexões com os bancos
    conexao_postgres = create_engine('postgresql://{user}:{password}@{host}:{port}/{db}'.format(
            user='xxx',
            password='xxx',
            host='xxx',
            port='xxx',
            db='xxx',
        ))
    
    conexao_sql_server = pyodbc.connect(
            # Driver que será utilizado na conexão
            'DRIVER={ODBC Driver 17 for SQL Server};'
            # IP ou nome do servidor.
            'SERVER=192.168.100.178\SQLEXPRESS;'
            'PORT=1433;'
            # Banco que será utilizado.
            'DATABASE=PythonMSSQL;'
            'UID=xxx;'
            'PWD=xxx')
    
    # Escrever o SQL
    select = '''
        select * from tabela
    '''
    
    # Inserir no SQL SERVER
    df = pd.read_sql(select, conexao_postgres)
    
    df.to_sql('nome_da_tabela',conexao_sql_server, if_exists = 'replace', index = False)

    Vou deixar também alguns links úteis que possam lhe ajudar.

    • pd.read_sql: Obter os dados do Banco de dados 
    • pd.to_sql: Inserir o DataFrame em um Banco de dados

    Espero que isso possa lhe auxiliar, basicamente só precisa criar as conexões com os bancos e obter e inserir os dados através do Pandas (Biblioteca). 

    Estou a disposição para lhe ajudar no que precisar.

    • Curtir 3
  24. Antes de iniciarmos a consultar os metadados do PostgreSQL através do SQL, vamos entender de fato o que são esses metadados

    Metadados

    Vou deixar aqui a definição que o site WikiBooks traz sobre o tema.

    "Metadados são dados sobre dados.
    Uma consulta normal retorna informações existentes em tabelas, já uma consulta sobre os metadados retorna informações sobre os bancos, os objetos dos bancos, os campos de tabelas, seus tipos de dados, seus atributos, suas constraints, etc"

    Creio que essa definição por si só já explica o suficiente para entendermos sobre metadados, mas ...
    "Blza Thanael. Entendi o que são Metadados, porém como isso pode me ajudar ?"

    Por que usar os metadados

    Vou explicar alguns casos onde essas informações podem ser uteis.

    • Automatizar documentações: Podemos obter informações sobre as estruturas das tabelas, por exemplo obter as colunas, tipo de dados, constraints etc. Com isso pode criar um HTML dinâmico para criar documentações dessas tabelas.
    • Criar Dashboards sobre a estrutura do seu banco de dados: Podemos obter informações importantes como, quantidade de tabelas, tamanho das tabelas entre outras informações.

    As possibilidades do que podemos fazer são varias, vai depender da sua criatividade e de quais perguntas esteja tentando responder.

    Como visualizar os Metadados

    Dentro do PostgreSQL existem determinadas tabelas que realizam o armazenamento dessas informações, tabelas por exemplo que começam com pg_catalog.alguma_coisa
    Exemplo :  (pg_catalog.pg_namespacepg_catalog.pg_namespace, pg_catalog.pg_tables)

    • Exemplo de como visualizar todas as tabelas de um Schema
      select * from pg_catalog.pg_tables pt 
      where schemaname = 'public'

      image.png

    • Exemplo de como verificar o tamanho das tabelas

      select 
      	pt.schemaname,
      	pt.tablename,
      	pg_size_pretty(pg_relation_size(pg_catalog.pg_class.oid)) AS table_size
      from pg_catalog.pg_tables pt 
      left join pg_catalog.pg_class 
      	on pg_catalog.pg_class.relname = pt.tablename 
      where schemaname = 'public'
      order by 3 desc

      image.png

    Considerações

    O objetivo aqui é apresenta-los aos metadados para que saibam que eles existem e a partir disso usarem sua criatividade para descobrir que tipo de perguntas podem responder com eles.

    Já conhece sobre Metadados ? Sinta-se a vontade para deixar nos comentários casos de uso onde usou metadados do PostgreSQL ou outra aplicação.

    • Curtir 2
×
×
  • Create New...