J'ai un problème avec la modification d'une valeur de dict et l'enregistrement du dict dans un fichier texte (le format doit être le même), je veux seulement changer le member_phone
champ.
Mon fichier texte est au 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'essaye de changer le member_phone
stocké dans d
, la valeur a changé pas 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 le dict dans un fichier texte avec le même format?
la source
save_obj
semble exiger que le fichierobj/'+ name + '.pkl
existe déjà. J'ai créé un dictionnaire nomméQ
,save_obj(Q, "Qtable")
je l'ai rempli et j'ai passé l'appel. J'ai eu une erreur:FileNotFoundError: [Errno 2] No such file or directory: 'obj/Qtable.pkl'
comment créer le fichier en premier lieu avant d'y écrire?wb+
pour créer un fichier, soit:with open('obj/'+ name + '.pkl', 'wb+')
+
au mode n'aura aucun effet sur votre problème (andrey.s est incorrect). Votre problème semble être dû à une ou deux choses. Pour quesave_obj()
cette réponse fonctionne, un sous-répertoire nommé"obj"
doit déjà exister caropen()
il n'en créera pas automatiquement. Deuxièmement, le premier argumentsave_obj()
est l'objet Python à enregistrer, pas le nom du sous-répertoire (bien que ce que vous entendiez par l' appelQ
dans l'exemple ne soit pas tout à fait clairsave_obj(Q, "Qtable")
). Vous pouvez créer un répertoire s'il ne se termine pas déjà avecos.mkdir()
.Pickle est probablement la meilleure option, mais au cas où quelqu'un se demanderait comment enregistrer et charger un dictionnaire dans un fichier à l'aide de NumPy:
Pour info: visionneuse de fichiers NPY
la source
type(read_dictionary)
révèle) et .item () convertit fondamentalement cet élément en un objet scalaire python qui est un dictionnaire comme indiqué iciNous pouvons également utiliser le
json
module dans le cas où des dictionnaires ou d'autres données peuvent être facilement mappés au format JSON .Cette solution apporte de nombreux avantages , par exemple fonctionne pour Python 2.x et Python 3.x sous une forme inchangée et en plus, les données enregistrées au format JSON peuvent être facilement transférées entre de nombreuses plates-formes ou programmes différents . Ces données sont également lisibles par l'homme .
la source
open
directement au lieu d'un contexte créé parwith
. Y a-t-il une garantie, le descripteur de fichier sera fermé en cas d'json.dump
échec?Je ne sais pas quelle est votre première question, mais si vous souhaitez enregistrer un dictionnaire dans un fichier, vous devez utiliser la
json
bibliothèque. Consultez la documentation des charges et met les fonctions.la source
Enregistrez et chargez le dict dans un fichier:
la source
Pour un dictionnaire de chaînes comme celui avec lequel vous avez affaire, cela pourrait être fait en utilisant uniquement les capacités de traitement de texte intégrées de Python.
(Notez que cela ne fonctionnerait pas si les valeurs sont autres.)
la source
split()
méthode) -qui est le sujet de cette question. Il semble que vous essayez de l'utiliser sur un dictionnaire de dictionnaires, donc non, cela ne fonctionnerait pas avec ceux-ci. Je n'apprécie pas non plus les votes négatifs des gens parce qu'ils ne comprennent pas vraiment la question (et donc le contexte des réponses fournies). Je mettrai à jour ma réponse pour faire en sorte que son utilisation soit appropriée, alors veuillez annuler votre vote défavorable.Je suggérerais d'enregistrer vos données en utilisant le format JSON au lieu du format pickle, car les fichiers JSON sont lisibles par l'homme, ce qui facilite votre débogage car vos données sont petites. Les fichiers JSON sont également utilisés par d'autres programmes pour lire et écrire des données. Vous pouvez en savoir plus ici
Vous devrez installer le module JSON, vous pouvez le faire avec pip:
Cela crée un fichier json avec le nom myfile.
Cela lit et stocke les données myfile.json dans un objet de données.
la source
À moins que vous ne souhaitiez vraiment conserver le dictionnaire, je pense que la meilleure solution est d'utiliser le
csv
module Python pour lire le fichier. Ensuite, vous obtenez des lignes de données et vous pouvez changermember_phone
ou ce que vous voulez; enfin, vous pouvez utiliser lecsv
nouveau module pour enregistrer le fichier dans le même format que vous l'avez ouvert.Code de lecture:
Code d'écriture:
Bien entendu, vous devez adapter votre
change()
fonction:la source
Of course, you need to adapt your change() function:
dict
été utilisé alors que csv fonctionne plus comme une listeJe ne l'ai pas chronométré mais je parie que h5 est plus rapide que pickle; la taille du fichier avec compression est presque certainement plus petite.
la source
Solution rapide et sale: convertissez le dict en chaîne et enregistrez-le dans un fichier, par exemple:
la source