Comment faire pour enregistrer un dictionnaire dans un fichier?
J'ai un problème avec la modification d'un dict valeur et l'enregistrement de la dict dans un fichier texte (au format doit être la même), je veux seulement changer la member_phone
champ.
Mon fichier texte est le format suivant:
memberID:member_name:member_email:member_phone
et j'ai divisé le fichier texte avec:
mdict={}
for line in file:
x=line.split(':')
a=x[0]
b=x[1]
c=x[2]
d=x[3]
e=b+':'+c+':'+d
mdict[a]=e
Quand j'ai essayer de changer le member_phone
stockées dans d
, la valeur a changé pas de flux par la clé,
def change(mdict,b,c,d,e):
a=input('ID')
if a in mdict:
d= str(input('phone'))
mdict[a]=b+':'+c+':'+d
else:
print('not')
et comment enregistrer les dict vers un fichier texte avec le même format?
Vous devez vous connecter pour publier un commentaire.
Python a la cornichon module juste pour ce genre de chose.
Ces fonctions sont tout que vous avez besoin pour enregistrer et charger presque n'importe quel objet:
Ces fonctions supposent que vous avez une
obj
dossier dans votre répertoire de travail actuel, qui sera utilisé pour stocker les objets.Noter que
pickle.HIGHEST_PROTOCOL
est un format binaire, ce qui pourrait ne pas être toujours commode, mais qui est bon pour les performances. Protocole0
est un format texte.Afin de sauver les collections de Python, il est le étagère module.
save_obj
semble exiger que le fichierobj/'+ name + '.pkl
existent déjà. J'ai créé un dictionnaire nomméQ
, peuplée, et fait l'appelsave_obj(Q, "Qtable")
j'ai une erreur:FileNotFoundError: [Errno 2] No such file or directory: 'obj/Qtable.pkl'
Comment créer le fichier, en premier lieu, avant d'écrire pour elle?wb+
pour créer le fichier, c'est à dire:with open('obj/'+ name + '.pkl', 'wb+')
+
à la mode n'aura aucun effet sur votre problème (andrey.s est incorrect). Votre problème ressemble c'est parce que d'une ou deux choses. Pour lesave_obj()
dans cette réponse au travail, un sous-répertoire nommé"obj"
doit il existe déjà parce queopen()
de ne pas en créer un automatiquement. Deuxième, le premier argumentsave_obj()
est l'objet Python pour être sauvé, pas le nom du sous-répertoire (même si c'est pas tout à fait clair ce que vous entendez par leQ
dans l'exemplesave_obj(Q, "Qtable")
appel). Vous pouvez créer un répertoire si ce n'est pas déjà sorties avecos.mkdir()
.Cornichon est probablement la meilleure option, mais au cas où quelqu'un se demande comment sauvegarder et de charger un dictionnaire dans un fichier à l'aide de NumPy:
FYI: NPY visionneuse de fichier
type(read_dictionary)
révèle donc) et .élément de() en fait, convertit cet élément à un python scalaire objet qui est un dictionnaire comme indiqué iciJe ne suis pas sûr de ce que votre première question est de savoir, mais si vous souhaitez enregistrer un dictionnaire de fichier, vous devez utiliser le
json
de la bibliothèque. Regardez la documentation de la charge et de la place des fonctions.Sauvegarder et de charger le dict de fichier:
On peut aussi utiliser le
json
module dans le cas où les dictionnaires ou d'autres données peuvent être facilement associées à JSON format.Cette solution apporte de nombreux avantages, par exemple, fonctionne pour Python 2.x et Python 3.x, sous une forme inchangée et, en outre, les données enregistrées dans JSON format peut être facilement transférées entre plusieurs plates-formes ou des programmes. Ces données sont également lisible par l'homme.
Pour un dictionnaire des chaînes de caractères comme celui que vous avez affaire, il pourrait être fait en utilisant uniquement Python intégré dans le texte de capacités de traitement.
(À noter qu'il ne fonctionne pas si les valeurs sont quelque chose d'autre.)
split()
de la méthode)—qui est le sujet de cette question. Il semble que vous essayez de l'utiliser sur un dictionnaire de dictionnaires, donc pas il ne serait pas travailler avec ceux-ci. Je n'ai pas l'heureux-voix de gens parce qu'ils ne comprennent pas vraiment la question (et donc le contexte de la réponse fournie). Je vais mettre à jour ma réponse à apporter lors de l'utilisation, il serait approprié, donc veuillez annuler votre vote.Sauf si vous voulez vraiment garder le dictionnaire, je pense que la meilleure solution est d'utiliser le
csv
module Python pour lire le fichier.Puis, vous obtenez des lignes de données et vous pouvez changer
member_phone
ou ce que vous voulez ;enfin, vous pouvez utiliser le
csv
module à nouveau pour enregistrer le fichier dans le même formatcomme vous l'avez ouvert.
Le Code de lecture:
Code pour l'écriture:
Bien sûr, vous avez besoin d'adapter votre
change()
fonction:Of course, you need to adapt your change() function:
dict
a été utilisé alors que csv fonctionne plus comme une listeJe n'ai pas chronométré mais je parie h5 est plus rapide que pickle; la taille du fichier avec la compression est presque certainement le plus petit.
Rapide et sale solution: convertir le dict à la chaîne et enregistrer le fichier, e.g:
Je vous suggère d'économiser vos données en utilisant le format JSON au lieu de pickle format JSON fichiers sont lisibles par un humain, ce qui rend votre débogage plus facile puisque vos données est petit. Des fichiers JSON sont également utilisés par d'autres programmes de lecture et d'écriture des données. Vous pouvez en lire plus à ce sujet ici
Vous aurez besoin pour installer le module JSON, vous pouvez le faire avec le pip:
Cela crée un fichier json avec le nom myfile.
Ce lit et stocke le myfile.les données json dans un objet de données.