Форум сайта python.su
0
пожалуйста помогите записать функцию outputDB() в более короткой форме
import shelve class Record: def __init__(self, temp): print('rrr') self.id = temp['id'] self.type = temp['type'] self.number = temp['number'] self.video = temp['video'] self.audio = temp['audio'] db = shelve.open('data') keys = ['id', 'type', 'number', 'video', 'audio']; def outputDB(): print('---------------------------------------------') for record in db: print(record, ': ', end = '\n') print(db[record].id, end = '\n') print(db[record].type, end = '\n') print(db[record].number, end = '\n') print(db[record].video, end = '\n') print(db[record].audio, end = '\n') print('=================') while 1: action = int(input('1 - print, 2 - write')) if(action == 1): outputDB() break else: temp = {} for key in keys: print('enter value for ', key) value = input('enter value: ') if '___' in value: temp[key] = value.split('___') else: temp[key] = value while 1: print('exists indexes: \n') keys = [] for k in db: print(k, end = "\n") keys.append(k) print(keys) index = input('enter index') if(index in keys): print('index exist') else: db[index] = Record(temp) break db.close() print('stop') dir(db)
Офлайн
221
zlodiak
если объект db может быть приведен с помощью __dict__ то можно так, используя join и генератор списка
def outputDB() print('---------------------------------------------') for record in db: print('\n'.join([str(getattr(a,key)) for key in a.__dict__.keys()])) print('=================')
Офлайн
0
да, остальной код ужасненький, это я и сам знаю)
спасибо за подсказку и за ссылку. но поясните ещё пожалуйста следующее.
как я понял, в вашем коде вместо a нужно подставить record? но после запуска outputDB() в таком виде консоль выводит такое сообщение об ошибке:
print('\n'.join())
AttributeError: ‘str’ object has no attribute ‘__dict__’
Офлайн
221
zlodiak
прошу прощения, код не исправил при копипасте:
for record in db: print('\n'.join([str(getattr(db[record],key)) for key in db[record].__dict__.keys()]))
Офлайн