0
votes

Python: 'ValueError: Trop de valeurs pour déballer (attendu 2)' pour un système de mot de passe nominatif

Je reçois cette erreur 'ValueError: Trop de valeurs pour décompresser (attendu 2)' Lorsque je fais un dictionnaire d'un fichier texte lorsqu'il y a plus d'une clé et de la valeur dans le fichier texte.

database = {}  #creates an empty dictionary
with open("file.txt", "r") as infile:  #opens the dictionary
    for line in infile: #for each line
        name, ask = line.strip().split(':') 
        database[name] = (ask)


name = input('Enter username: ')
ask = input('Enter pin: ')
if name in database:
    if ask in database[name]:
        print('Welcome', name)

    else:
        database.update( {name : ask} )
        print(database)
else:
    database.update( {name : ask} )
    print(database)


with open('file.txt', 'w') as file: 
    file.write(json.dumps(database)) #updates the text file with the new databse


2 commentaires

Pouvez-vous fournir un exemple de ligne de "file.txt"?


Voici ce que le fichier texte en est à partir de maintenant qui crée une erreur: {"Nom": "Bonjour", "Man": "MANE"}


5 Réponses :


0
votes

Utilisation de la fonction Pythons EVAL , vous pouvez analyser la chaîne en lecture du fichier à un dictionnaire. Ensuite, vous pouvez l'écrire à votre dictionnaire xxx


1 commentaires

Avec cela: j'ai essayé de saisir la clé: "Nom" pour le nom d'utilisateur et la valeur: 'Bonjour' pour PIN. Cela a abouti à la sortie: {'Hello': 'MANE', 'NAME': 'HELLO'} et modifié le contenu du fichier texte sur: {"Hello": "MANE", "NOM": "Bonjour"}



0
votes

Essayez ceci, xxx

Remarque:

Selon le commentaire @jaggers,

J'ai considéré < Code> {"Nom": "Bonjour", "Man": "MANE"} Ligne dans le fichier texte.


5 commentaires

Cela renvoie l'erreur: NameError: Nom 'Nom' n'est pas défini. Ceci est pour la ligne: base de données [nom] = eval_dict ["nom"]


@Jaggers, vous avez mentionné un exemple de ligne de texte présent dans le fichier en question commentaires. J'ai utilisé la même chose pour créer un programme. Quel est le texte dans votre fichier texte?


Le contenu du fichier texte est le suivant: {"Nom": "Bonjour", "Man": "MANE"} Cependant, j'ai besoin du code pour travailler quoi que ce soit dans le fichier texte, car cela peut être sujet à modifier, car les utilisateurs peuvent Modifiez leurs détails, les utilisateurs peuvent supprimer leur compte ou que de nouveaux utilisateurs peuvent être ajoutés au dictionnaire.


@jaggers, peu importe que les données sont supprimées ou ajoutées. La propriété du dictionnaire est que les clés devraient être uniques. Les valeurs peuvent être mises à jour. Si vous devez gérer le dictionnaire des utilisateurs, ce que je peux vous suggérer, c'est créer un comme touche et maintenir le dictionnaire comme valeur de cette touche.


Cela sera complètement hors de la portée de cette question. users_dict = {'1': {'Nom': 'Hello1', 'Man': 'mane1'}, '2': {'Nom': 'Hello2', 'Man': 'MANE2'} < / code>. Vous pouvez considérer cela comme un exemple similaire que j'ai dit.



1
votes

Vérifiez toutes les lignes de votre fichier fichier.txt . Il pourrait y avoir un cas où la survenue de ":" est plus d'une. Depuis, vous décompressez la liste en deux variables. S'il y a plus de deux valeurs dans la liste résultante sur la ligne 4, i.e. line.strip (). Split (":"), il soumettra une exception.


4 commentaires

Le contenu du fichier est: {"Nom": "Bonjour", "Man": "MANE"}


Le contenu du fichier semble être une donnée JSON. Vous pouvez utiliser la fonction Charge () de JSON Module pour charger les données comme dictionnaire. Assurez-vous également que les touches sont uniques dans le fichier.


serait-il juste être chargé (fichier.txt)


La fonction Charger () nécessite un objet de fichier à lire. Vous pouvez renvoyer ce document realPyThon.com/python-json pour plus d'informations.



0
votes

Votre code ouvre le fichier, puis itire sur la ligne informatique par ligne. Si c'est exactement comme vous le dites dans votre commentaire à votre question initiale, la première ligne est la suivante: xxx

qui ne peut pas être analysé dans votre code. < / p>

si votre fichier était au lieu de ce formulaire: xxx

(la nouvelle ligne est implicite) alors cela fonctionnerait bien.

Le erreur semble être que vous pensez qu'un fichier texte qui ressemble à un dictionnaire Python sera analysé automatiquement par Python comme dictionnaire: ce n'est pas pourquoi vous avez d'autres réponses ici suggérant d'utiliser Eval () ou similaire Pour l'analyser pour vous.

Vous voudrez peut-être envisager d'utiliser le module JSON pour lire et écrire des fichiers de dictionnaire.

HTH


3 commentaires

Oh je vois ce que tu veux dire. Savez-vous comment rendre le code créer le texte dans le fichier dans ce format


Le système de vérification réel fonctionnerait également avec le code écrit dans la question initiale?


Il y a toujours plusieurs façons de faire des choses comme ça. Ma suggestion serait lue le fichier dans le même format que vous l'écrivez et continuez d'utiliser le module JSON pour le faire. Vraisemblablement, c'est un exercice d'apprentissage pour vous? Dans ce cas, je vous laisserai à vous de rechercher la documentation.



0
votes

Pourquoi pas simplement utiliser un fichier JSON simple? XXX


0 commentaires