Jump to content

cmoreti

Membros
  • Contagem de Conteúdo

    13
  • Ingressou

  • Última visita

Postagens postado por cmoreti

  1. Pessoal, minha barra de progresso só é atualizada quando o processo termina, tanto para criar quanto para atualizar a pasta: 

    Podem ajudar por favor?


        def atualizar_repositorio_git(usuario, senha, caminhoGit):
            senha_codificada = quote(senha, safe='')
            url_repo = f'http://{usuario}:{senha_codificada}@azuredevops:MeuCaminhoURL/_git/conversor'
            caminhoLog = os.path.join(caminhoGit, 'clone_log.txt')

            # Verificar se o diretório de destino já existe e não está vazio
            if os.path.exists(caminhoGit) and os.listdir(caminhoGit):
                print("Diretório de destino já existe e não está vazio.")
                return

            # Executar o comando de clone do repositório
            comando_git = f"git clone {url_repo} {caminhoGit}"

            # Executar o comando com a barra de progresso
            print("Atualizando Repositório:")
            with tqdm(total=100, ncols=80, unit="%") as pbar:
                process = subprocess.Popen(comando_git, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)

                for line in process.stdout:
                    output = line.decode("utf-8").strip()
                    if "Receiving objects" in output:
                        percentage = int(output.split()[0])
                        pbar.update(percentage - pbar.n)

                pbar.close()

            if process.returncode == 0:
                print("Repositório atualizado com sucesso.")
            else:
                print("Erro ao atualizar o repositório.")
                print("Erro:", process.stdout.read().decode("utf-8"))

            print(f"Atualização do repositório concluída. Log salvo em: {caminhoLog}")

     

    Obrigado

  2. @Thanael, o comando vem sempre da forma que eu falei que inclusive vc citou na sua resposta, fiz de outra forma e funcionou! O que eu quero é fazer uma automação, removeram acesso a base de dados de uma galera, ficam me pedindo para executar update, delete e insert a maior parte do dia, essa galera é de suporte, inviável, resolvi escrever essa automação. Essa parte do código está pronta e funcional! Vou terminar ela  implementando FileSystemWatcher, assim eles vão salvar a query em um txt, colocar na pasta para esse arquivo ser processado. Tomei todos os cuidados principalmente no update e delete checando se tem a clausula where. 

    ficou bem legal!

    • Curtir 1
  3. Pessoal, estou tentando achar uma string dentro da outra. To tentando com regex.

    Essa é minha string:   

    comando = UPDATE `cidade_ns_prod`.`nomedaminhatabela` SET `campo` = 'ca' where (`campo_id` = '3151995');

    Eu preciso trazer a substring cidade_ns_prod, o problema é que cidade é variante... então pode ser saopaulo_ns_prod, sorocaba_ns_prod, saojoaodemeriti_ns_prod,  itapita_ns_prod, etc...

     

    Alguém pode me ajudar?

     

    Obrigado

  4. Bom dia Pessoal, estou enfrentando um problema que: Foi cadastrado barra invertida no campo da tabela. 

    Esses são alguns dos registros

    CRCC\ENSEG-AM/JRS
    CRCC\CIA GRALHA AZUL-AM/JRS
    CRCC\BANCO FIAT-AM/JRS
    CRCC\ITAUSEG PART-AM/JRS
    CRCC\ITAU CORRETORA-AM/JRS
    CRCC\ITAUSA INV.-AM/JRS
    CRCC\ITAUCORP-AM/JRS
    REC DE JUROS SOBRE CAPITA PROPRIO E DIVIDENDOS/CAI XAPAR\SUBSIDIARIASCRCC\KINEA -AM/JRS

     

    Na hora de gerar meus registros no arquivo tomo o seguinte erro:

    File "pandas\_libs\writers.pyx", line 72, in pandas._libs.writers.write_csv_rows
    _csv.Error: need to escape, but no escapechar set, justamente por ter a barra invertida.

    Já tentei de varias maneiras sair, todas sem sucesso e, se conseguir trazer para o arquivo da mesma forma que está no registro é melhor!

    Tentei... string.replace("\", "/")

    string.replace("\", "/", regex=True)

    Alguém pode ajudar por favor?

     

    Obrigado

    Claudio Moreti

     

    • Curtir 1
  5. Pessoal, estou tentando agrupar arquivos txt e não estou conseguindo.

    Ou seja... tenho vários arquivos txt e preciso colocar o conteúdo em apenas um. txt1.txt, txt2.txt, txt3.txt, txt4.txt, txt5.txt .... txt200.txt  pegar todos esses caras e criar um arquivo com todo o conteúdo txtagrupado.txt 

    Estou tentando fazer assim:

    from os import chdir, getcwd, listdir

    pasta = r'c:/Moreti/ArquivosProjetoPython/SIGBANCOS/'

    chdir(pasta)

    for arquivo in listdir():
            print(arquivo)

    with open( 'ARQUIVO_DE_PLANOS_DE_CONTAS.txt', 'a' ) as outfile:
        for nomes in arquivo:
            with open( nomes ) as infile:
                outfile.write( infile.read() )
            outfile.write( "\n" )

     

    tomo o erro:  FileNotFoundError: [Errno 2] No such file or directory: 'S'

     

    Obrigado

     

    Claudio Moreti

  6. @Thanael, encontrei a forma.

    Eu estava tentando passar uma variável dentro de uma string, não ia conseguir nunca da forma que estava tentando faze.

    Estou lendo essa linha do txt:

    WITH pg AS (SELECT ROW_NUMBER() OVER(ORDER BY id ASC) AS RowNumber, * FROM PlanoContas) SELECT * FROM pg WHERE RowNumber BETWEEN {PagIni} AND {PagFim}

    No Python queria passar os valores para PagIni e PagFim, acontece que toda a linha é uma string.

    A solução foi usar o replace ficando assim:

    query = conteudoArquivo.replace("{PagIni}", f'{PagIni}').replace("{PagFim}", f'{PagFim}')

    Obtive sucesso na execução:

    Obrigado pela ajuda

     

    • Curtir 1
  7. @Thanael, estou tentando implementar a paginação, estou tomando esse erro e, acredito ser problema nas variáveis.

    pandas.io.sql.DatabaseError: Execution failed on sql 'WITH pg AS (SELECT ROW_NUMBER() OVER(ORDER BY id ASC) AS RowNumber, * FROM PlanoContas) SELECT * FROM pg WHERE RowNumber BETWEEN {PagIni} AND {PagFim}
    ': ('42000', '[42000] [Microsoft][ODBC Driver 17 for SQL Server]Erro de sintaxe, violação de permissão ou outro erro não específico (0) (SQLExecDirectW)') ao executar essa linha:   df = pd.read_sql(query, conn)

     

    Meu código está assim:

    As variáveis em vermelho eu estou lendo de um arquivo txt.

    WITH pg AS (SELECT ROW_NUMBER() OVER(ORDER BY id ASC) AS RowNumber, * FROM PlanoContas) SELECT * FROM pg WHERE RowNumber BETWEEN {PagIni} AND {PagFim}
    SELECT count(*) FROM PlanoContas

    Estou lendo a primeira linha e armazenando na variável conteudoArquivo

    Depois leio a segunda linha e armazeno na variável conteudoCount

     

            Pagina = 1
            PagIni =1
            PagFim = 1000
            QtdPg = 1000
            

            # Pega a quantidade de registros na tabela e divide por 1000
            cursor.execute(f'' + conteudoCount + '')
            count = list(cursor)[0]
            QtdPg= count[0]/1000
            print(QtdPg)

            while (Pagina <= QtdPg😞

                query = (f'' + conteudoArquivo + '')

                df = pd.read_sql(query, conn)

                NomeArquivoPasta = arquivo

                if arquivo[0:9] == "SIGBANCOS":

                    df.to_csv(r"C:/Moreti/ArquivosProjetoPython/" + arquivo[0:9] + "/" + NomeArquivoPasta, index=False,
                              header=True, sep='|',
                              quoting=1, encoding='utf8')

                elif x[0:12] == "SIGCARTORIOS":

                    df.to_csv(r"C:/Moreti/ArquivosProjetoPython/" + arquivo[0:12] + "/" + NomeArquivoPasta, index=False,
                              header=True, sep='|',
                              quoting=1, encoding='utf8')
                else:

                    df.to_csv(r"C:/Moreti/ArquivosProjetoPython/" + arquivo[0:6] + "/" + NomeArquivoPasta, index=False,
                              header=True, sep='|',
                              quoting=1, encoding='utf8')


            PagIni = PagFim + 1
            PagFim = PagFim + QtdPg
            Pagina = Pagina + 1


            conteudo.read()
            conteudo.close()

    Vc pode estar se perguntando... Pq eu não coloco esses nomes de arquivos dentro de um array ou lista?

    Pq esses nomes de arquivos mudam constantemente conforme o nome da Cidade. Como isso é uma automação se necessário mudar o nome do arquivo não preciso alterar o fonte, apenas altera o nome do arquivo. A ideia é: criar o arquivo com o nome da referida cidade e sua query dentro. Nesse caso preciso paginar pq estou tomando erro de memória. Algumas tabelas são bem grandes.

    Antes de mais nada... Já fui desenvolvedor no passado, escrevi códigos em VB6, VB.NET, C#, hoje trabalho como DBA, Python é uma novidade nos meus aprendizados.

    Vc pode me ajudar por favor?

    grato por sua paciência.

     

     

     

  8. Oi @Thanael, eu ainda não consegui resolver, não me expressei bem na pergunta e, o SGDB que uso é Sql Server.

    Escrevi outra forma de paginar, vou ver se sobra um tempo para implementar no Python.

    Por hora obrigado

    • Curtir 1
  9. @Thanael, obrigado pela resposta, Não consegui rodar meu código ainda, se eu fizer como vc colocou roda tranquilamente, dx eu tentar te explicar...

    a minha query fica em um arquivo txt, preciso ler esse arquivo e executar minha query.

    Seguindo o seu exemplo meu código está assim:

    Dentro do arquivo: Nome do arquivo = conteudoArquivo

    'SELECT * FROM TABLE WHERE numero = {variavel}

    No Python

    df = pd.read_sql(f'conteudoArquivo' , conexao)

    Já tentei concatenar 

    df = pd.read_sql(f'' + conteudoArquivo + '' , conexao)

     

    Obrigado

     

  10. 5 horas atrás, cmoreti disse:

    Pessoal, tenho um select que está pegando a tabela inteira, sem filtro. Select * from tabela, está estourando a memória.

    Já fiz um script para paginar, funcionar no sql. Preciso implementar no Python. Alguém pode me auxiliar por favor?

    Uso Pandas 

    Ele lista as 10000 primeiras linhas, agora estou tomando esse erro:

    Execution failed on sql '<pyodbc.Cursor object at 0x000001BA56D0F130>': The first argument to execute must be a string or unicode query.

     

    5 horas atrás, cmoreti disse:

    Obrigado

     

     

  11. Pessoal, tenho um select que está pegando a tabela inteira, sem filtro. Select * from tabela, está estourando a memória.

    Já fiz um script para paginar, funcionar no sql. Preciso implementar no Python. Alguém pode me auxiliar por favor?

    Uso Pandas 

     

    Obrigado

     

  12. Pessoal, tenho uma tarefa repetitiva todas as semanas, é gerar mais de 200 arquivos. No início comecei a gerar pelo Sql Server SSIS, muito demorado. escrevi um Python que me facilitou bem a vida, porém um pouco demorado, em torno de 1h e 1/2, sou iniciante nessa plataforma.

    Escrevi esse código:

    import pyodbc

    import pandas as pd

    conn = pyodbc.connect(

    'DRIVER={ODBC Driver 17 for SQL Server};SERVER=MinhaInstancia;DATABASE=MeuDataBase;UID=MeuUsuario;PWD=MinhaSenha')

    cursor = conn.cursor()

    NomeArquivo = 'Nome_Do_Meu_Arquivo'

    query = "select * FROM Tabela"

    df = pd.read_sql(query, conn)

    df.to_csv(r"C:/ArquivosProjetoPython/bancos/" + NomeArquivo + "csv", index=False, header=True, sep='|', quoting=1)

    Preciso automatizar essa rotina, Eu tenho na minha pasta vários arquivos com a query dentro. Preciso Ler arquivo por arquivo e setar uma variável no código acima.

    Por exemplo:

    Na variável NomeArquivo eu preciso pegar o nome do arquivo, nesse caso (Nome_Do_Meu_Arquivo) na pasta e setar nessa variável.

    Na variável query eu preciso pegar a query que consta dentro do arquivo Nome_Do_Meu_Arquivo e setar nessa variável.

    Preciso fazer isso em n arquivos.

    Todos os arquivos ficam na mesma pasta.

    Alguém pode me ajudar por favor? Lembrando. Sou iniciante na linguagem.

    Obrigado

     

×
×
  • Create New...