| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- #!/usr/bin/env python3
- """
- Synopsis: %(prog)s [-h|-g|-b|-r|-a] dbfile [ picklefile ]
- Convert the database file given on the command line to a pickle
- representation. The optional flags indicate the type of the database:
- -a - open using dbm (any supported format)
- -b - open as bsddb btree file
- -d - open as dbm file
- -g - open as gdbm file
- -h - open as bsddb hash file
- -r - open as bsddb recno file
- The default is hash. If a pickle file is named it is opened for write
- access (deleting any existing data). If no pickle file is named, the pickle
- output is written to standard output.
- """
- import getopt
- try:
- import bsddb
- except ImportError:
- bsddb = None
- try:
- import dbm.ndbm as dbm
- except ImportError:
- dbm = None
- try:
- import dbm.gnu as gdbm
- except ImportError:
- gdbm = None
- try:
- import dbm.ndbm as anydbm
- except ImportError:
- anydbm = None
- import sys
- try:
- import pickle as pickle
- except ImportError:
- import pickle
- prog = sys.argv[0]
- def usage():
- sys.stderr.write(__doc__ % globals())
- def main(args):
- try:
- opts, args = getopt.getopt(args, "hbrdag",
- ["hash", "btree", "recno", "dbm",
- "gdbm", "anydbm"])
- except getopt.error:
- usage()
- return 1
- if len(args) == 0 or len(args) > 2:
- usage()
- return 1
- elif len(args) == 1:
- dbfile = args[0]
- pfile = sys.stdout
- else:
- dbfile = args[0]
- try:
- pfile = open(args[1], 'wb')
- except IOError:
- sys.stderr.write("Unable to open %s\n" % args[1])
- return 1
- dbopen = None
- for opt, arg in opts:
- if opt in ("-h", "--hash"):
- try:
- dbopen = bsddb.hashopen
- except AttributeError:
- sys.stderr.write("bsddb module unavailable.\n")
- return 1
- elif opt in ("-b", "--btree"):
- try:
- dbopen = bsddb.btopen
- except AttributeError:
- sys.stderr.write("bsddb module unavailable.\n")
- return 1
- elif opt in ("-r", "--recno"):
- try:
- dbopen = bsddb.rnopen
- except AttributeError:
- sys.stderr.write("bsddb module unavailable.\n")
- return 1
- elif opt in ("-a", "--anydbm"):
- try:
- dbopen = anydbm.open
- except AttributeError:
- sys.stderr.write("dbm module unavailable.\n")
- return 1
- elif opt in ("-g", "--gdbm"):
- try:
- dbopen = gdbm.open
- except AttributeError:
- sys.stderr.write("dbm.gnu module unavailable.\n")
- return 1
- elif opt in ("-d", "--dbm"):
- try:
- dbopen = dbm.open
- except AttributeError:
- sys.stderr.write("dbm.ndbm module unavailable.\n")
- return 1
- if dbopen is None:
- if bsddb is None:
- sys.stderr.write("bsddb module unavailable - ")
- sys.stderr.write("must specify dbtype.\n")
- return 1
- else:
- dbopen = bsddb.hashopen
- try:
- db = dbopen(dbfile, 'r')
- except bsddb.error:
- sys.stderr.write("Unable to open %s. " % dbfile)
- sys.stderr.write("Check for format or version mismatch.\n")
- return 1
- for k in db.keys():
- pickle.dump((k, db[k]), pfile, 1==1)
- db.close()
- pfile.close()
- return 0
- if __name__ == "__main__":
- sys.exit(main(sys.argv[1:]))
|