[Python] Estou com problemas com um programa de geração de arquivo txt, as informações não...

Discussão em 'Python' iniciado por Stack, Fevereiro 12, 2025.

  1. Stack

    Stack Membro Participativo

    estou desenvolvendo um projeto para minha empresa em Python. Se trata de um programa que irá abrir uma janela e nela irá solicitar algumas informações do usuário para gerar um arquivo txt com o histórico FIES de um aluno, meu problema é que ao gerar este arquivo txt as informações não estão muito bem alinhadas com as colunas que preciso, como posso alterar a disposição das informações para ficar da maneira que eu quero?

    Preciso que o arquivo seja alinhado da maneira que está na IMAGEM DE ANEXO.

    Irei disponibilizar o código usado para vocês analisarem, obrigado pela atenção.

    import tkinter as tk
    from tkinter import messagebox

    def gerar_semestres(contratacao):
    """Gera os semestres automaticamente até 2025.1"""
    semestres = []
    ano, semestre = map(int, contratacao.split('.'))
    while (ano < 2025) or (ano == 2025 and semestre == 1):
    semestres.append(f"{ano}.{semestre}")
    semestre = 2 if semestre == 1 else 1
    if semestre == 1:
    ano += 1
    return semestres

    def salvar_dados():
    nome = entry_nome.get()
    cpf = entry_cpf.get()
    curso = entry_curso.get()
    semestres_contratados = entry_semestres_contratados.get()
    primeiro_dilatacao = entry_primeira_dilatacao.get()
    percentual_financiamento = entry_percentual_financiamento.get()

    if not nome or not cpf or not entry_contratacao.get():
    messagebox.showerror("Erro", "Nome, CPF e Semestre de contratação são obrigatórios!")
    return

    semestres = gerar_semestres(entry_contratacao.get())
    dados_semestres = []

    for i, periodo in enumerate(semestres):
    situacao_fies = entries_situacao_fies.get()
    situacao_academica = entries_situacao_academica.get()
    semestre = entries_semestre.get()
    reprovacao = entries_reprovacao.get()

    # Verificar se a situação FIES é "SUSPENDEU", "SUSPENDEU EXCEP." ou "SUSPENDEU TÁCITO"
    if any(suspensao in situacao_fies for suspensao in ["SUSPENDEU", "SUSPENDEU EXCEP.", "SUSPENDEU TÁCITO"]):
    reprovacao = "--"
    entries_reprovacao.delete(0, tk.END)
    entries_reprovacao.insert(0, reprovacao)

    # Semestre atual (2025.1) sempre tem reprovação como "--"
    if periodo == "2025.1":
    reprovacao = "--"
    entries_reprovacao.delete(0, tk.END)
    entries_reprovacao.insert(0, reprovacao)

    if periodo == "2025.1":
    entry_semestre_2025.delete(0, tk.END)
    entry_semestre_2025.insert(0, semestre)

    dados_semestres.append([periodo, situacao_fies, situacao_academica, semestre, reprovacao])

    nome_arquivo = f"{nome.replace(' ', '_')}.txt"
    with open(nome_arquivo, "w", encoding="utf-8") as arquivo:
    # Cabeçalho
    arquivo.write("HISTÓRICO FIES\n\n")
    arquivo.write(f"NOME: {nome:<40} CPF: {cpf}\n\n")

    # Títulos das colunas
    arquivo.write("PERÍODO SITUAÇÃO SITUAÇÃO SEMESTRE A SER CURSADO REPROVAÇÃO\n")
    arquivo.write(" LETIVO FIES ACADÊMICO COM O FIES (%)\n")
    arquivo.write("-" * 110 + "\n")

    # Dados dos semestres
    for linha in dados_semestres:
    periodo, situacao_fies, situacao_academica, semestre, reprovacao = linha
    arquivo.write(f"{periodo:<20}{situacao_fies:<25}{situacao_academica:<25}{semestre:<35}{reprovacao:<15}\n")

    # Informações adicionais
    arquivo.write("\n• Curso matriculado no RM/FIES: " + curso + "\n")
    arquivo.write("• Quantidade de semestres contratados no Fies (atualizado): " + semestres_contratados + "\n")
    arquivo.write("• Semestre (provável) da primeira dilatação do estudante: " + primeiro_dilatacao + "\n")
    arquivo.write("• Semestre a ser cursado pelo estudante (no FIES) em 2025.1: -- " + entry_semestre_2025.get() + "\n")
    arquivo.write("• Percentual atualizado do financiamento: " + percentual_financiamento + "\n\n")

    # Observação
    arquivo.write("Obs: Este histórico deverá ser reavaliado, visto que o mesmo poderá sofrer alterações devido à solicitação de \n")
    arquivo.write("alteração de nota, revisão de frequência, mudança de curso, e outros ajustes realizados pela secretaria acadêmica.\n")
    arquivo.write("HISTÓRICO FIES\n")

    messagebox.showinfo("Sucesso", f"Arquivo '{nome_arquivo}' gerado com sucesso!")

    def atualizar_semestres():
    for widget in frame_semestres.winfo_children():
    widget.destroy()

    semestres = gerar_semestres(entry_contratacao.get())
    global entries_situacao_fies, entries_situacao_academica, entries_semestre, entries_reprovacao

    entries_situacao_fies = []
    entries_situacao_academica = []
    entries_semestre = []
    entries_reprovacao = []

    tk.Label(frame_semestres, text="Período Letivo").grid(row=0, column=0)
    tk.Label(frame_semestres, text="Situação FIES").grid(row=0, column=1)
    tk.Label(frame_semestres, text="Situação Acadêmica").grid(row=0, column=2)
    tk.Label(frame_semestres, text="Semestre a ser cursado").grid(row=0, column=3)
    tk.Label(frame_semestres, text="Reprovação (%)").grid(row=0, column=4)

    for i, periodo in enumerate(semestres, start=1):
    tk.Label(frame_semestres, text=periodo).grid(row=i, column=0)
    entries_situacao_fies.append(tk.Entry(frame_semestres))
    entries_situacao_fies[-1].grid(row=i, column=1)

    entries_situacao_academica.append(tk.Entry(frame_semestres))
    entries_situacao_academica[-1].grid(row=i, column=2)

    entries_semestre.append(tk.Entry(frame_semestres))
    entries_semestre[-1].grid(row=i, column=3)

    entries_reprovacao.append(tk.Entry(frame_semestres))
    entries_reprovacao[-1].grid(row=i, column=4)

    root = tk.Tk()
    root.title("Cadastro Histórico FIES")

    # Campos principais
    tk.Label(root, text="Nome:").grid(row=0, column=0)
    tk.Label(root, text="CPF:").grid(row=0, column=1)
    tk.Label(root, text="Semestre de contratação:").grid(row=0, column=2)
    entry_nome = tk.Entry(root, width=40)
    entry_cpf = tk.Entry(root)
    entry_contratacao = tk.Entry(root)
    entry_nome.grid(row=1, column=0)
    entry_cpf.grid(row=1, column=1)
    entry_contratacao.grid(row=1, column=2)
    tk.Button(root, text="Gerar Semestres", command=atualizar_semestres).grid(row=1, column=3)

    # Área de semestres
    frame_semestres = tk.Frame(root)
    frame_semestres.grid(row=2, column=0, columnspan=4)

    # Campos adicionais
    tk.Label(root, text="Curso matriculado no RM/FIES:").grid(row=3, column=0)
    entry_curso = tk.Entry(root)
    entry_curso.grid(row=3, column=1)

    tk.Label(root, text="Quantidade de semestres contratados no Fies (atualizado):").grid(row=4, column=0)
    entry_semestres_contratados = tk.Entry(root)
    entry_semestres_contratados.grid(row=4, column=1)

    tk.Label(root, text="Semestre (provável) da primeira dilatação do estudante:").grid(row=5, column=0)
    entry_primeira_dilatacao = tk.Entry(root)
    entry_primeira_dilatacao.grid(row=5, column=1)

    tk.Label(root, text="Semestre a ser cursado pelo estudante (no FIES) em 2025.1:").grid(row=6, column=0)
    entry_semestre_2025 = tk.Entry(root)
    entry_semestre_2025.grid(row=6, column=1)

    tk.Label(root, text="Percentual atualizado do financiamento:").grid(row=7, column=0)
    entry_percentual_financiamento = tk.Entry(root)
    entry_percentual_financiamento.grid(row=7, column=1)

    tk.Button(root, text="Gerar Histórico", command=salvar_dados).grid(row=8, column=0, columnspan=2)

    root.mainloop()

    Continue reading...

Compartilhe esta Página