diff options
-rw-r--r-- | Tools/scripts/db2pickle.py | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/Tools/scripts/db2pickle.py b/Tools/scripts/db2pickle.py new file mode 100644 index 0000000..b445e93 --- /dev/null +++ b/Tools/scripts/db2pickle.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python + +""" +Synopsis: %(prog)s [-h|-b|-r] dbfile [ picklefile ] + +Convert the bsddb database file given on the command like to a pickle +representation. The optional flags indicate the type of the database (hash, +btree, recno). 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 +except ImportError: + dbm = None +try: + import anydbm +except ImportError: + anydbm = None +import sys +try: + import cPickle as pickle +except ImportError: + import pickle + +prog = sys.argv[0] + +def usage(): + print >> sys.stderr, __doc__ % globals() + +def main(args): + try: + opts, args = getopt.getopt(args, "hbrda", + ["hash", "btree", "recno", "dbm", "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 = file(args[1], 'wb') + except IOError: + print >> sys.stderr, "Unable to open", args[1] + return 1 + + dbopen = None + for opt, arg in opts: + if opt in ("-h", "--hash"): + try: + dbopen = bsddb.hashopen + except AttributeError: + print >> sys.stderr, "bsddb module unavailable." + return 1 + elif opt in ("-b", "--btree"): + try: + dbopen = bsddb.btopen + except AttributeError: + print >> sys.stderr, "bsddb module unavailable." + return 1 + elif opt in ("-r", "--recno"): + try: + dbopen = bsddb.rnopen + except AttributeError: + print >> sys.stderr, "bsddb module unavailable." + return 1 + elif opt in ("-a", "--anydbm"): + try: + dbopen = anydbm.open + except AttributeError: + print >> sys.stderr, "anydbm module unavailable." + return 1 + elif opt in ("-d", "--dbm"): + try: + dbopen = dbm.open + except AttributeError: + print >> sys.stderr, "dbm module unavailable." + return 1 + if dbopen is None: + if bsddb is None: + print >> sys.stderr, "bsddb module unavailable -" + print >> sys.stderr, "must specify dbtype." + return 1 + else: + dbopen = bsddb.hashopen + + try: + db = dbopen(dbfile, 'r') + except bsddb.error: + print >> sys.stderr, "Unable to open", dbfile, + print >> sys.stderr, "Check for format or version mismatch." + 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:])) |