Найти - Пользователи
Полная версия: shelve
Начало » Python для новичков » shelve
1
sp3
доброго времени суток. в общем проблема заключается в том, что не могу заменить значение ключа в файле, либо удалить этот ключ.
подскажите , что делаю не так.
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)
bw
А поточнее нельзя? Я тоже не могу, если спиной к монитору сижу.

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

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

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

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

..bw
Ed
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()
sp3
i :rolleyes:
спасибо, что помогли разобраться.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB