Mam problem ze zmianą wartości dykta i zapisaniem dyktu do pliku tekstowego (format musi być taki sam), chcę tylko zmienić member_phone
pole.
Mój plik tekstowy ma następujący format:
memberID:member_name:member_email:member_phone
i podzieliłem plik tekstowy na:
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
Kiedy próbuję zmienić member_phone
zapisane w d
, wartość zmieniła się nie płynie przez klawisz,
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')
i jak zapisać dyktando do pliku tekstowego o tym samym formacie?
źródło
save_obj
wydaje się, że plikobj/'+ name + '.pkl
już istnieje. Utworzyłem słownik o nazwieQ
, zapełniłem go isave_obj(Q, "Qtable")
wykonałem połączenie. Otrzymałem błąd: WFileNotFoundError: [Errno 2] No such file or directory: 'obj/Qtable.pkl'
jaki sposób można utworzyć plik w pierwszej kolejności przed zapisaniem do niego?wb+
do utworzenia pliku, tj .:with open('obj/'+ name + '.pkl', 'wb+')
+
do trybu nie wpłynie na twój problem (andrey.s jest niepoprawny). Wygląda na to, że Twój problem wynika z jednej lub dwóch rzeczy. Abysave_obj()
w tej odpowiedzi działała, podkatalog o nazwie"obj"
musi już istnieć, ponieważopen()
nie utworzy go automatycznie. Drugi pierwszy argumentsave_obj()
to obiekt Pythona, który ma zostać zapisany, a nie nazwa podkatalogu (chociaż nie jest do końca jasne, co masz na myśli przez wywołanieQ
w przykładziesave_obj(Q, "Qtable")
). Możesz utworzyć katalog, jeśli nie kończy się już zos.mkdir()
.Pickle to prawdopodobnie najlepsza opcja, ale na wypadek, gdyby ktoś zastanawiał się, jak zapisać i załadować słownik do pliku za pomocą NumPy:
FYI: przeglądarka plików NPY
źródło
type(read_dictionary)
ujawnia), a .item () w zasadzie konwertuje ten element na obiekt skalarny Pythona, który jest słownikiem, jak podano tutajZ
json
modułu możemy skorzystać również w przypadku, gdy słowniki lub inne dane można łatwo zmapować do formatu JSON .Takie rozwiązanie przynosi wiele korzyści , m.in. prace dla Pythona 2.x oraz Python 3.x w niezmienionej formie , a ponadto, dane zapisane w JSON formacie mogą być łatwo przenoszone między wielu różnych platformach lub programów . Te dane są również czytelne dla człowieka .
źródło
open
bezpośrednio zamiast kontekstu utworzonego przezwith
. Czy istnieje gwarancja, że uchwyt pliku zostanie zamknięty, jeśli sięjson.dump
nie powiedzie?Nie jestem pewien, jakie jest twoje pierwsze pytanie, ale jeśli chcesz zapisać słownik do pliku, skorzystaj z
json
biblioteki. Przejrzyj dokumentację obciążeń i wstawiaj funkcje.źródło
Zapisz i wczytaj dykt do pliku:
źródło
W przypadku słownika ciągów znaków, takiego jak ten, z którym masz do czynienia, można to zrobić przy użyciu tylko wbudowanych funkcji przetwarzania tekstu Pythona.
(Pamiętaj, że to nie zadziała, jeśli wartości są czymś innym).
źródło
split()
metody)-co jest tematem tej kwestii. Wygląda na to, że próbujesz użyć go w słowniku ze słownikami, więc nie, to nie zadziała. Nie doceniam również głosów negatywnych od ludzi, ponieważ tak naprawdę nie rozumieją pytania (a tym samym kontekstu udzielanych odpowiedzi). Zaktualizuję moją odpowiedź, aby udzielić, gdy jej użyję, więc cofnij swój głos negatywny.Sugerowałbym zapisywanie danych w formacie JSON zamiast w formacie pikle, ponieważ pliki JSON są czytelne dla człowieka, co ułatwia debugowanie, ponieważ dane są małe. Pliki JSON są również używane przez inne programy do odczytu i zapisu danych. Więcej na ten temat przeczytasz tutaj
Musisz zainstalować moduł JSON, możesz to zrobić za pomocą pip:
Spowoduje to utworzenie pliku json o nazwie myfile.
Odczytuje i zapisuje dane myfile.json w obiekcie danych.
źródło
Chyba że naprawdę chcesz zachować słownik, myślę, że najlepszym rozwiązaniem jest użycie
csv
modułu Python do odczytania pliku. Następnie otrzymujesz wiersze danych i możesz zmienićmember_phone
lub cokolwiek chcesz; wreszcie możesz użyćcsv
modułu ponownie, aby zapisać plik w tym samym formacie, w jakim go otworzyłeś.Kod do czytania:
Kod do pisania:
Oczywiście musisz dostosować swoją
change()
funkcję:źródło
Of course, you need to adapt your change() function:
dict
użyto a, podczas gdy csv działa bardziej jak listaNie mierzyłem tego w czasie, ale założę się, że h5 jest szybsze niż pikle; rozmiar pliku z kompresją jest prawie na pewno mniejszy.
źródło
Szybkie i brudne rozwiązanie: przekonwertuj dyktę na łańcuch i zapisz do pliku, np .:
źródło