Форум сайта python.su
доброго времени суток. в общем проблема заключается в том, что не могу заменить значение ключа в файле, либо удалить этот ключ.
подскажите , что делаю не так.
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)
Офлайн
А поточнее нельзя? Я тоже не могу, если спиной к монитору сижу.
> d = “nnnnnnnnnnnd”
Откуда i должно взяться?
p.s. С Shelve не работал, может знатоки лучше помогут.
p.p.s.
Вообще смысл этого кода от меня ускользает.
> d = “data__%s” %(i)
А ведь кому-то придется с этим работать, почему не так ‘data__%d’%i ? (Я про форматирование и про тип переменной цикла.)
..bw
Отредактировано (Янв. 14, 2010 12:21:44)
Офлайн
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()
Офлайн
i :rolleyes:
спасибо, что помогли разобраться.
Офлайн