Я создаю быстрый скрипт для чтения файла Excel и т. д. Однако при его запуске я получаю сообщение об ошибке: «Кодек 'utf-8' не может декодировать байт 0xe7 в позиции 78: недопустимый байт продолжения». ".
Моя база данных — UTF-8, я использую Docker для локальной среды, все остальное настроено. В другом приложении с теми же учетными данными базы данных все работает нормально.
import tkinter as tk
from tkinter import ttk
import psycopg2
import pandas as pd
from unidecode import unidecode
import threading
def normalizar_nome(nome):
return unidecode(nome).lower()
def profissional_combina(nome_excel_norm, nome_banco_norm):
partes_excel = nome_excel_norm.split()
if len(partes_excel) >= 2:
primeira = partes_excel[0]
ultima = partes_excel[-1]
return (primeira in nome_banco_norm) and (ultima in nome_banco_norm)
else:
return partes_excel[0] in nome_banco_norm
def processar_dados():
try:
resultados.clear()
progress_var.set(0)
label_status["text"] = "Processando..."
conn = psycopg2.connect(
host="localhost",
port=5432,
database="xxx",
user="[email protected]",
password="teste@exemplo01"
)
cur = conn.cursor()
cur.execute("SELECT id, nome FROM tinc_profissional;")
rows = cur.fetchall()
conn.close()
profissionais_banco = []
for pid, pnome in rows:
try:
pnome_utf8 = pnome.encode('utf-8', 'replace').decode('utf-8', 'replace')
profissionais_banco.append((pid, pnome_utf8))
except Exception as e:
print(f"Erro nesse krai {pid}: {e}")
df = pd.read_excel("vendor/Agenda 2024.1 EXPANSÃO - TESTE.xlsx", sheet_name="Agenda")
profissionais_excel = df["TELECONSULTOR"].dropna().unique()
profissionais_excel_norm = [normalizar_nome(nome) for nome in profissionais_excel]
total = len(profissionais_excel)
for i, (nome_excel, nome_excel_norm) in enumerate(zip(profissionais_excel, profissionais_excel_norm)):
for pid, pnome in profissionais_banco:
if profissional_combina(nome_excel_norm, normalizar_nome(pnome)):
resultados.append({
"Nome Excel": nome_excel,
"ID Banco": pid,
"Nome Banco": pnome
})
progress_var.set((i + 1) / total * 100)
label_status["text"] = f"Processando: {nome_excel} ({i + 1}/{total})"
root.update_idletasks()
print(f"Deu bom excel mais total: {nome_excel} ({i + 1}/{total})")
if resultados:
df_resultados = pd.DataFrame(resultados, columns=["Nome Excel", "ID Banco", "Nome Banco"])
df_resultados.to_excel("vendor/Resultados.xlsx", index=False)
label_status["text"] = f"Concluído krai! salvo em 'Resultados.xlsx'."
else:
label_status["text"] = "Nenhum resultado encontrado."
progress_var.set(100)
except Exception as e:
label_status["text"] = f"Erro: {str(e)}"
print(f"Esse no processamento analisa ai krai: {str(e)}") # DEBUG
def executar():
threading.Thread(target=processar_dados).start()
resultados = []
root = tk.Tk()
root.title("Espera que ta executando")
progress_var = tk.DoubleVar()
progress = ttk.Progressbar(root, variable=progress_var, maximum=100)
progress.pack(pady=10, padx=20, fill="x")
label_status = tk.Label(root, text="Pronto para iniciar...")
label_status.pack(pady=5)
btn_start = tk.Button(root, text="Iniciar", command=executar)
btn_start.pack(pady=10)
root.mainloop()
Подробнее здесь: https://stackoverflow.com/questions/792 ... tion-bytee
Кодек «UTF-8» не может декодировать байт 0xe7 в позиции 78: неверный байт продолжения ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение