Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 14, 2010 11:08:23

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

shelve

доброго времени суток. в общем проблема заключается в том, что не могу заменить значение ключа в файле, либо удалить этот ключ.
подскажите , что делаю не так.

import shelve

fileBan = "ban.dat"
d = shelve.open(fileBan)
for i in range(1, 10000):
d[str(i)] = "data__%s" %(i)

d.close()


while 1:
x = raw_input('x = ')
if x == 'stop':
break
else:
d = shelve.open(fileBan)
print ('len = %s'%len(d) )
data = d[x]
d[str(i)] = "nnnnnnnnnnnd"
#del d[str(i)]
#d.sync()
d.close()
print ('= %s'%data)



Офлайн

#2 Янв. 14, 2010 12:18:30

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

shelve

А поточнее нельзя? Я тоже не могу, если спиной к монитору сижу.

> d = “nnnnnnnnnnnd”
Откуда i должно взяться?

p.s. С Shelve не работал, может знатоки лучше помогут.

p.p.s.
Вообще смысл этого кода от меня ускользает.

> d = “data__%s” %(i)
А ведь кому-то придется с этим работать, почему не так ‘data__%d’%i ? (Я про форматирование и про тип переменной цикла.)

..bw



Отредактировано (Янв. 14, 2010 12:21:44)

Офлайн

#3 Янв. 14, 2010 14:47:46

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

shelve

sp3
доброго времени суток. в общем проблема заключается в том, что не могу заменить значение ключа в файле, либо удалить этот ключ.
подскажите , что делаю не так.
Вы делаете не так следующее:

        data = d[x] # здесь создается локальная переменная data, равная d[введенное значение]
d[str(i)] = "nnnnnnnnnnnd" # здесь вы меняете данные в shelve по индексу 9999 (значение i после цикла)
d.close()
print ('= %s'%data) # а здесь вы печатаете вашу локальную переменную data, которая не имеет никакого отношения, к тому, что вы поменяли.
Вот вам образчик работающего кода (только та часть, где я менял):
while 1:
x = raw_input('x = ')
if x == 'stop':
break

d = shelve.open(fileBan)
print('before: d[%s] = %s' % (x, d[x]))
d[x] = "nnnnnnnnnnnd"
d.close()

d = shelve.open(fileBan)
print('after: d[%s] = %s' % (x, d[x]))
d.close()



Офлайн

#4 Янв. 14, 2010 15:13:08

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

shelve

i :rolleyes:
спасибо, что помогли разобраться.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version