Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

código python para um executável windows

Boa tarde, Instrutores e colegas Escrevi um código para juntar planilhas em uma só. Ele lê todas as planilhas que estão em um diretório, junta todas em um só arquivo e salva no mesmo diretório. Estou com uma dúvida. Qual seria a melhor forma de eu disponibilizar este meu arquivo para que possa ser utilizado por outros colegas do meu trabalho, registrando que são usuários comuns e que não entendem nada de linguagem de programação? Imaginei que eu poderia salvar o arquivo como um .exe e daí sempre que eles precisassem fazer esta transformação poderiam salvar o arquivo na mesma pasta dos arquivos que pretendem transformar, executar e salvar na mesma pasta o arquivo excel já transformado. Para isto precisarei de uma ajuda dos senhores, não sei como colocar uma referência no meu código para que ele possa ler os arquivos que estão na mesma pasta que o código .exe estará salvo, e mais ainda, não sei como poderia perguntar ( pegar do usuário) com qual nome ele gostaria de salvar este arquivo e como colocar no código que deverá salvar na mesma pasta que os demais arquivos estão, juntamente com o executável. O meu código está abaixo:

import os
import numpy as np
import pandas as pd
import openpyxl
import xlrd
import re

path = r'C:\Users\henrique.fontenelle.N2018001432\Downloads\Rods 02 a 03 09h46'

def apagar():
    path = r'C:\Users\henrique.fontenelle.N2018001432\Downloads\Rods 02 a 03 09h46'
    dir = os.listdir(path)
    for file in dir:
        if file == "desktop.ini":
            os.remove(file)


for excelFile in os.listdir(path):
    print(excelFile)

appended_rods = []

for relatorio in os.listdir(path):
    if relatorio.endswith(".xlsx"):
        rod_merged = pd.read_excel(relatorio, header=[0])
        extract_state = str(rod_merged.iloc[[], [0]])
        start = extract_state.find("/") + len("/")
        end = extract_state.find(" e suas")
        state = extract_state[start:end]

        extract_period = str(rod_merged.iloc[[], [0]])
        start = extract_period.find("De: ") + len("De: ")
        end = extract_period.find(". ]\n")
        period = extract_period[start:end]

        rod = pd.read_excel(relatorio, header=[1])
        rod["Regional"] = state
        rod["Período"] = period

    appended_rods.append(rod)
reformatedDataSheet = pd.concat(appended_rods, ignore_index=True)
reformatedDataSheet.drop_duplicates(inplace=True)
relatorio = reformatedDataSheet.filter(
    items=['Origem / ROD', 'Categoria / ROD', 'Item / ROD', 'Quantidade', 'Unidade', 'Regional', 'Período'])
 relatorio.to_excel(
     r'C:\Users\henrique.fontenelle.N2018001432\Downloads\Rods 02 a 03 09h46\Christi02 e 03_06_2021.xlsx',
     index=False)

print(relatorio)

Será que poderiam me dar esta ajuda?

2 respostas
solução!

Você poderia criar uma interface gráfica simples usando PySimpleGUI, Tkinter(recomendo pois é simples e rápido de aprender), etc. Nessas bibliotecas você tem a opção de filedialog , primeiro você poderia pedir para o usuário selecionar em qual pasta estão os arquivos "'.csv" ou ".xlsx", e posteriormente em que diretório quer salvar o arquivo final. Caso não queira criar uma interface a mesma ideia pode ser feita prompt pedido pra o usuário colocar os diretórios. Posso estar errado, mas acho que é uma maneira que possa ser feito tal programa.

Muito boa resposta do Nicolas! Mas apenas completando, você também poderá utilizar o método getcwd do os que nos retorna o caminho exato aonde o nosso projeto está, veja:

Nossa pasta do projeto:

Imagem diretório

O retorno do método:

Retorno da nossa função, retornando o caminho do diretório

Então, nas variáveis path, você pode utilizar esse método para conseguir o diretório do usuario e executar o resto do código.

E caso não queira criar uma interface gráfica, clicando aqui você tem acesso a um tópico que é explicado como criar um executável!

Espero ter ajudado, bons estudos :D