Sto cercando di creare un semplice programma di memorizzazione delle password in Python, e sembra piuttosto semplice, quindi mi chiedo se sto usando shelve errato.Il modulo Shelve in python non funziona: "il tipo db non può essere determinato"
ho il principale file di .py:
import shelve
passwords = shelve.open('./passwords_dict.py')
choice = raw_input("Add password (a) or choose site (c)?")
if choice[0] == 'a':
site_key = raw_input("Add for which site? ").lower()
userpass = raw_input("Add any info such as username, email, or passwords: ")
passwords[site_key] = userpass
else:
site = raw_input("Which site? ").lower()
if site in passwords:
print "Info for " + site + ": " + passwords[site]
else:
print site, "doesn't seem to exist!"
print "Done!"
passwords.close()
E l'altro file, passwords_dict.py, è solo un dizionario vuoto.
Ma quando provo a fare funzionare il programma, ottengo questo errore:
Traceback (most recent call last):
File "passwords.py", line 3, in <module>
passwords = shelve.open('passwords_dict.py')
File "/usr/lib/python2.7/shelve.py", line 239, in open
return DbfilenameShelf(filename, flag, protocol, writeback)
File "/usr/lib/python2.7/shelve.py", line 223, in __init__
Shelf.__init__(self, anydbm.open(filename, flag), protocol, writeback)
File "/usr/lib/python2.7/anydbm.py", line 82, in open
raise error, "db type could not be determined"
anydbm.error: db type could not be determined
Quando provo ad usare anydbm invece, ottengo questo errore:
Traceback (most recent call last):
File "passwords.py", line 3, in <module>
passwords = anydbm.open('passwords_dict.py')
File "/usr/lib/python2.7/anydbm.py", line 82, in open
raise error, "db type could not be determined"
anydbm.error: db type could not be determined
E quando cerco di uso invece dbm, ottengo questo errore:
Traceback (most recent call last):
File "passwords.py", line 3, in <module>
passwords = dbm.open('./passwords_dict.py')
dbm.error: (2, 'No such file or directory')
Cosa sto facendo male? C'è un altro modo per memorizzare un dizionario ed essere ancora in grado di estrarre le chiavi usando l'input dell'utente (piuttosto che l'intero dizionario, che suppongo sia ciò che fa pickle)?
dispiace, che cosa è la sua tempfile? questo funziona anche se il tempfile esiste già? –
'tempfile' è un modulo python standard. 'Tempfile.mkstemp' dovrebbe creare un file inesistente per definizione. –