Ich habe Probleme beim Ändern eines Diktatwerts und beim Speichern des Diktats in einer Textdatei (das Format muss identisch sein). Ich möchte nur das member_phone
Feld ändern .
Meine Textdatei hat das folgende Format:
memberID:member_name:member_email:member_phone
und ich teile die Textdatei mit:
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
Wenn ich versuche, das member_phone
gespeicherte zu ändern d
, hat sich der Wert geändert und fließt nicht durch den Schlüssel.
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')
und wie speichere ich das Diktat in einer Textdatei mit demselben Format?
quelle
save_obj
scheint zu erfordern, dass die Dateiobj/'+ name + '.pkl
bereits vorhanden ist. Ich habe ein Wörterbuch mit dem Namen erstelltQ
, es ausgefüllt und den Aufruf getätigt.save_obj(Q, "Qtable")
Ich habe eine Fehlermeldung erhalten:FileNotFoundError: [Errno 2] No such file or directory: 'obj/Qtable.pkl'
Wie erstellt man die Datei überhaupt, bevor ich darauf schreibe?wb+
, um Datei zu erstellen, dh:with open('obj/'+ name + '.pkl', 'wb+')
+
zum Modus hat keine Auswirkungen auf Ihr Problem (andrey.s ist falsch). Ihr Problem scheint auf ein oder zwei Dinge zurückzuführen zu sein. Damit dassave_obj()
in dieser Antwort funktioniert,"obj"
muss bereits ein Unterverzeichnis mit dem Namen vorhanden sein, daopen()
es nicht automatisch erstellt wird. Zweitens ist das erste Argumentsave_obj()
das zu speichernde Python-Objekt, nicht der Name des Unterverzeichnisses (obwohl nicht ganz klar ist, was Sie mit demQ
im Beispielaufruf gemeint habensave_obj(Q, "Qtable")
). Sie können ein Verzeichnis erstellen, wenn es noch nicht mit beendet wurdeos.mkdir()
.Pickle ist wahrscheinlich die beste Option, aber falls sich jemand fragt, wie ein Wörterbuch mit NumPy gespeichert und in eine Datei geladen werden kann:
Zu Ihrer Information : NPY-Datei-Viewer
quelle
type(read_dictionary)
so) und .item () konvertiert dieses Element im Grunde in ein Python-Skalar-Objekt, das ein Wörterbuch ist, wie hierWir können das
json
Modul auch verwenden, wenn Wörterbücher oder andere Daten problemlos dem JSON- Format zugeordnet werden können.Diese Lösung bietet viele Vorteile , z. B. funktioniert Python 2.x und Python 3.x in unveränderter Form. Darüber hinaus können im JSON- Format gespeicherte Daten problemlos zwischen vielen verschiedenen Plattformen oder Programmen übertragen werden . Diese Daten sind auch für Menschen lesbar .
quelle
open
direkt anstelle eines von erstellten Kontexts zu verwendenwith
. Gibt es eine Garantie, wird das Dateihandle geschlossen, wenn diesjson.dump
fehlschlägt?Ich bin nicht sicher, was Ihre erste Frage ist, aber wenn Sie ein Wörterbuch in einer Datei speichern möchten, sollten Sie die
json
Bibliothek verwenden. Schlagen Sie die Dokumentation der Lasten und Put-Funktionen nach.quelle
Diktat speichern und in Datei laden:
quelle
Für ein Wörterbuch mit Zeichenfolgen wie der, mit der Sie es zu tun haben, können nur die in Python integrierten Textverarbeitungsfunktionen verwendet werden.
(Beachten Sie, dass dies nicht funktionieren würde, wenn die Werte etwas anderes sind.)
quelle
split()
Methode haben) - was das Thema dieser Frage ist. Es hört sich so an, als würden Sie versuchen, es in einem Wörterbuch mit Wörterbüchern zu verwenden, also nein, es würde mit diesen nicht funktionieren. Ich schätze auch Abstimmungen von Leuten nicht, weil sie die Frage (und damit den Kontext der Antworten) nicht wirklich verstehen. Ich werde meine Antwort aktualisieren, um sie zu verwenden, wenn sie angemessen wäre. Bitte machen Sie Ihre Abwertung rückgängig.Ich würde vorschlagen, Ihre Daten im JSON-Format anstelle des Pickle-Formats zu speichern, da die JSON-Dateien für Menschen lesbar sind, was das Debuggen erleichtert, da Ihre Daten klein sind. JSON-Dateien werden auch von anderen Programmen zum Lesen und Schreiben von Daten verwendet. Sie können mehr darüber lesen Sie hier
Sie müssen das JSON-Modul installieren. Dies können Sie mit pip tun:
Dadurch wird eine JSON-Datei mit dem Namen myfile erstellt.
Dadurch werden die myfile.json-Daten in einem Datenobjekt gelesen und gespeichert.
quelle
Wenn Sie das Wörterbuch nicht wirklich behalten möchten, ist es meiner Meinung nach die beste Lösung, das
csv
Python-Modul zum Lesen der Datei zu verwenden. Dann erhalten Sie Datenzeilen und können ändernmember_phone
oder was auch immer Sie wollen; Schließlich können Sie dascsv
Modul erneut verwenden, um die Datei im selben Format zu speichern, in dem Sie sie geöffnet haben.Code zum Lesen:
Code zum Schreiben:
Natürlich müssen Sie Ihre
change()
Funktion anpassen :quelle
Of course, you need to adapt your change() function:
dict
verwendet, während CSV eher wie eine ListeIch habe es nicht geplant, aber ich wette, h5 ist schneller als Gurke; Die Dateigröße mit Komprimierung ist mit ziemlicher Sicherheit kleiner.
quelle
Schnelle und schmutzige Lösung: Konvertieren Sie das Diktat in einen String und speichern Sie es in einer Datei, z.
quelle