Обновлення файлу типу SHELVE.
Ще завдання
Поміняти ключі і значення ключів місцями ( із українсько-російського словника зробити російсько-український)
def invert_dict(d): inv = dict() for key in d: val = d[key] if val not in inv: inv[val] = [key] else: inv[val].append(key) return invМи створили новий словник на базі старого.
Приклади:
Словник як телефонний довідник:
>>> dic = {'vanya' : 23323223, 'smith' : 32232332}
>>> dic['fedya'] = 33332222
>>> dic
{'vanya': 23323223, 'fedya': 33332222, 'smith': 32232332}
>>> dic['smith']
>>> del dic['vanya']
>>> dic
{'fedya': 33332222, 'smith': 32232332}
>>> dic.keys()
['fedya', 'smith']
>>> dic.has_key('fedya')
True
Створити словник за допомогою спписка кортежів:
|
Для сканування словника по ключам скористаємось for:
>>> table = {'Python': 'Guido van Rossum', ... 'Perl': 'Larry Wall', ... 'Tcl': 'John Ousterhout' } >>> for lang in table: ... print(lang, table[lang]) .. >>> Tcl John Ousterhout >>> Python Guido van Rossum >>> Perl Larry Wall |
Словники добре підходять для організації зберігання багатовимірних масивів і матриць з елементами, що повторюються:
>>> Matrix = {} >>> Matrix[(2, 3, 4)] = 88 >>> Matrix[(7, 8, 9)] = 99 >>> >>> X = 2; Y = 3; Z = 4 >>> Matrix[(X, Y, Z)] >>> Matrix {(2, 3, 4): 88, (7, 8, 9): 99} |
За допомогою словників можна зберігати структуровану інформацію у вигляді записів:
>>> man = {'name': 'Serg', ... 'jobs': ['programmer', 'writer'], ... 'web': 'www.iakovlev.org', ... 'home': {'city': 'Moscow', 'zip':129000}} >>> man['name'] Serg >>> man['jobs'][1] 'writer' |
Методи словника
cmp(dict1, dict2) Порівнює елементи двох словників. | |
len(dict) Повертає число елементів словника.. | |
str(dict) Повертає рядок, який представляє словник. | |
type(variable) Повертає тип елемента | |
dict.clear() опорожняє dict | |
dict.copy() повертає копію словника | |
dict.fromkeys(seq, val) створює новий словник із послідовностей seq, val . | |
dict.get(key, default=None) При наявності ключа key повертає його значення інакше - значення default (тут None) | |
dict.has_key(key) Повертає true при наявності значення key, інакше - false | |
dict.items() Повертає список пар (key, value) | |
dict.keys() повертає список ключових слів | |
dict.setdefault(key, default=None) Подібний до get(), але якщо елемент відсутній, то повертає значення із default | |
dict.update(dict2) Доповнює словник dict елементами із dict2 | |
dict.values() повертає список значень словника |
Структура СЛОВНИК розрахована на використання в оперативній памяті. Якщо ви маєте намір використати зовнішню пам'ять із збереженням логіки роботи з dict – скористайтесь модулем пайтону SHELVES
Shelve
Для отримання доступу до shelve імпортуйте модуль і відкрийте в ньому файл під будь ч\яким іменем (нижче вибрано імя shelf):
import shelveshelf = shelve.open('filename')Якщо такого файлу не існує – він буде створений автоматично. Тепр ви можете отримати доступ до обєктів shelve так, як це зроблено в словнику:
shelf['key'] = object # create or change the entry for 'key' object = shelf['key'] # load the entry for 'key' count = len(shelf) # return the number of entries list = shelf.keys() # get the list of stored keys found = shelf.has_key('key') # check if there's an entry for 'key' del shelf['key'] # remove the entry for 'key'Exercise 1: Створіть клас student з атрибутами name, address і vuz студента. Потім створіть базу даних типу shelve, яка використовує в ролі ключа порядковий номер запису студента і занесіть до неї об’єкти класу student, що відповідають студентам вашої групи.
Exercise 2: Створіть програму, яка читає файл попереднього прикладу та роздруковує імена всіх студентів, занесених до файлу.
Обновлення файлу типу SHELVE.
Оскільки всяка зміна об’єкту, прочитаного із зовнішнього файлу відбувається в оперативній памяті, для збереження відредагованого обєкту в зовнішній памяті слід скористатись операцією обновлення даних:
>>> import shelve>>> shelf = shelve.open('shelve_test')>>> >>> shelf['key'] = [1,2,3]>>> print shelf['key'][1, 2, 3]>>> >>> shelf['key'].append(4) # зміна відбулася в буфері ОП, але не в ЗП>>> print shelf['key'] # роздруковується старе значення[1, 2, 3]Є два способи поновлення інформації в базі даних :
>>> import shelve>>> shelf = shelve.open('shelve_test')>>> >>> shelf['key'] = [1,2,3]>>> print shelf['key'][1, 2, 3]>>> >>> list = shelf['key'] # запамятовуємо значення, яке слід відредагувати>>> list.append(4) # тепер модифікуємо його>>> shelf['key'] = list # запам’ятовуємо нове значення в ЗП>>> print shelf['key'] # роздруковуємо із ЗП[1, 2, 3, 4]Другий спосіб обновлення даних – це використання опції writeback при відкритті файлу. Встановлення цього значення в True,дозволяє кешування змін. Проте кеш буде скинутий у файл при використанні методу sync або close.
>>> import shelve>>> >>> shelf = shelve.open('shelve_test', writeback=True)>>> >>> shelf['key'] = [1,2,3]>>> print shelf['key'][1, 2, 3]>>> >>> shelf['key'].append(4) # цей запис буде кешований>>> shelf.sync() # скидаємо кеш у файл>>> print shelf['key'] # перевіряємо вміст запису файлу[1, 2, 3, 4]Exercise 3: Складіть програму, яка додає до списку атрибутів зареєстрованих обєктів з непарними номерами реєстраційний номер.