it-swarm.com.de

Wie speichere ich ein Wörterbuch in einer Datei?

Ich habe Probleme mit dem Ändern eines Diktierwerts und dem Speichern des Diktiers in einer Textdatei (das Format muss dasselbe sein). Ich möchte nur das Feld member_phone ändern.

Meine Textdatei hat folgendes 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, den in d gespeicherten member_phone zu ändern, hat sich der Wert nicht durch den Schlüssel geändert. 

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 kann man das Diktat in einer Textdatei mit demselben Format speichern?

87
XueYuan Wang

Python hat das pickle - Modul nur für diese Art von Dingen.

Diese Funktionen sind alles, was Sie zum Speichern und Laden fast aller Objekte benötigen:

def save_obj(obj, name ):
    with open('obj/'+ name + '.pkl', 'wb') as f:
        pickle.dump(obj, f, pickle.HIGHEST_PROTOCOL)

def load_obj(name ):
    with open('obj/' + name + '.pkl', 'rb') as f:
        return pickle.load(f)

Diese Funktionen setzen voraus, dass sich im aktuellen Arbeitsverzeichnis ein obj-Ordner befindet, in dem die Objekte gespeichert werden.

Beachten Sie, dass pickle.HIGHEST_PROTOCOL ein binäres Format ist, das nicht immer bequem sein kann, aber für die Leistung geeignet ist. Protokoll 0 ist ein Textformat.

Um Sammlungen von Python zu speichern, gibt es das Modul shelve

191
Zah

Pickle ist wahrscheinlich die beste Option, aber falls sich jemand fragt, wie man ein Wörterbuch mit NumPy speichert und in eine Datei lädt:

import numpy as np

# Save
dictionary = {'hello':'world'}
np.save('my_file.npy', dictionary) 

# Load
read_dictionary = np.load('my_file.npy').item()
print(read_dictionary['hello']) # displays "world"

FYI: NPY-Datei-Viewer

117

Ich bin nicht sicher, was Ihre erste Frage ist, aber wenn Sie ein Wörterbuch in einer Datei speichern möchten, sollten Sie die Bibliothek json verwenden. Informieren Sie sich über die Dokumentation der Lade- und Put-Funktionen.

13
John

Speichern und Laden von Diktieren in Datei:

def save_dict_to_file(dic):
    f = open('dict.txt','w')
    f.write(str(dic))
    f.close()

def load_dict_from_file():
    f = open('dict.txt','r')
    data=f.read()
    f.close()
    return eval(data)
6
junglejet

Bei einem Wörterbuch mit Zeichenfolgen wie dem, mit dem Sie sich befassen, kann dies nur mit den in Python integrierten Textverarbeitungsfunktionen erfolgen. 

(Beachten Sie, dass dies nicht funktionieren würde, wenn die Werte etwas anderes sind.)

with open('members.txt') as file:
    mdict={}
    for line in file:
        a, b, c, d = line.strip().split(':')
        mdict[a] = b + ':' + c + ':' + d

a = input('ID: ')
if a not in mdict:
    print('ID {} not found'.format(a))
else:
    b, c, d = mdict[a].split(':')
    d = input('phone: ')
    mdict[a] = b + ':' + c + ':' + d  # update entry
    with open('members.txt', 'w') as file:  # rewrite file
        for id, values in mdict.items():
            file.write(':'.join([id] + values.split(':')) + '\n')
2
martineau

Wir können auch das Modul json verwenden, wenn Wörterbücher oder andere Daten leicht dem Format JSON zugeordnet werden können.

Daten in Datei serialisieren:

import json
json.dump( data, open( "file_name.json", 'w' ) )

Daten aus Datei lesen:

import json
data = json.load( open( "file_name.json" ) )

Diese Lösung bringt viele Vorteile mit sich, z. B. funktioniert für Python 2.x und Python 3.x in unveränderter Form und außerdem Daten, die inJSONgespeichert sind. Format kann leicht zwischen vielen verschiedenen Plattformen oder Programmen übertragen werden. Diese Daten sind auch für Menschen lesbar.

2
simhumileco

Ich habe es nicht zeitlich festgelegt, aber ich wette, h5 ist schneller als Pickle; Die Dateigröße mit Komprimierung ist fast sicher kleiner.

import deepdish as dd
dd.io.save(filename, {'dict1': dict1, 'dict2': dict2}, compression=('blosc', 9))
2
wordsforthewise

Wenn Sie das Wörterbuch nicht wirklich behalten möchten, denke ich, ist die beste Lösung, das Python-Modul csv zu verwenden, um die Datei zu lesen. Dann erhalten Sie Zeilen mit Daten und können member_phone oder was immer Sie möchten, ändern können Sie das Modul csv erneut verwenden, um die Datei in demselben Format zu speichernSie geöffnet haben.

Code zum Lesen:

import csv

with open("my_input_file.txt", "r") as f:
   reader = csv.reader(f, delimiter=":")
   lines = list(reader)

Code zum Schreiben:

with open("my_output_file.txt", "w") as f:
   writer = csv.writer(f, delimiter=":")
   writer.writerows(lines)

Natürlich müssen Sie Ihre change()-Funktion anpassen:

def change(lines):
    a = input('ID')
    for line in lines:
      if line[0] == a:
        d=str(input("phone"))
        line[3]=d
        break
    else:
      print "not"
2
mguijarr

Schnelle und schmutzige Lösung: Konvertieren Sie das Diktat in einen String und speichern Sie es in einer Datei, z. B .:

#dict could be anything:

savedict = open('savedict001.txt', 'w')
savedict.write(str(dict))
savedict.close()
0
Patrick Stacey