Estou tentando obter entradas do usuário para criar um arquivo onde os usuários podem armazenar site, nome de usuário e senha em formato de tabela sempre que os usuários apertam um botão. Eu fiz a função abaixo e parece ok para mim. No entanto, quando um usuário insere a segunda e a terceira entradas, a estrutura do quadro de dados é quebrada. Alguma ideia do por que isso acontece? Você pode ver o resultado da impressão sempre que adicionar uma linha aos meus dados.
Código:
from tkinter import *
import pandas as pd
import os
def save_password():
website_name = input("Website: ")
username = input("Username: ")
password = input("Password: ")
# password_details = f"website: {website_name};username: {username};password: {password}"
input_entries_dict = {"Website": [website_name],
"Username/Email": [username],
"Password": [password]}
input_entries_df = pd.DataFrame(input_entries_dict)
if not os.path.isfile("MyPassword_test.txt"):
input_entries_df.to_csv("MyPassword_test.txt", index=False)
print(input_entries_df)
else:
data = pd.read_csv("MyPassword_test.txt")
data = data._append(input_entries_df, ignore_index=True, sort=True)
print(data)
data.to_csv("MyPassword_test.txt", sep=";", index=False)
save_password()
Saídas para cada tempo:
First entry: ALL FINE
Website Username/Email Password
0 d32d23 f7324f2 f3223f2
Second Entry: Column names are shifted
Password Username/Email Website
0 f3223f2 f7324f2 d32d23
1 ddwefddsfds5 32fwefw5 48sfd4s
Third Entry:Colum of "Password;Username/Email;Website" created!
Password Password;Username/Email;Website Username/Email Website
0 NaN f3223f2;f7324f2;d32d23 NaN NaN
1 NaN ddwefddsfds5;32fwefw5;48sfd4s NaN NaN
2 154152 NaN f32f23f23 2f23f2332
A confusão é causada por escrever o .CSV com um
;
separador, mas ignorar isso na leitura. Use:Seu problema principal aqui é que, no caso de um arquivo existente, você reescreve o arquivo com um separador não padrão
sep=";"
e, portanto:A correção é usar um separador padrão. Aceite o padrão em todos os lugares ou substitua-o em todos os lugares.
Em qualquer caso, você deve parar de usar
._append()
e mudar parapandas.concat()
Eu provavelmente usaria o
csv
pacote aqui em vez de ,pandas
mas se você estiver interessado empandas
, eu posso sugerir.