+++ /dev/null
-#!/usr/bin/env python\r
-\r
-"""\r
-Synopsis: %(prog)s [-h|-b|-g|-r|-a|-d] [ picklefile ] dbfile\r
-\r
-Read the given picklefile as a series of key/value pairs and write to a new\r
-database. If the database already exists, any contents are deleted. The\r
-optional flags indicate the type of the output database:\r
-\r
- -a - open using anydbm\r
- -b - open as bsddb btree file\r
- -d - open as dbm file\r
- -g - open as gdbm file\r
- -h - open as bsddb hash file\r
- -r - open as bsddb recno file\r
-\r
-The default is hash. If a pickle file is named it is opened for read\r
-access. If no pickle file is named, the pickle input is read from standard\r
-input.\r
-\r
-Note that recno databases can only contain integer keys, so you can't dump a\r
-hash or btree database using db2pickle.py and reconstitute it to a recno\r
-database with %(prog)s unless your keys are integers.\r
-\r
-"""\r
-\r
-import getopt\r
-try:\r
- import bsddb\r
-except ImportError:\r
- bsddb = None\r
-try:\r
- import dbm\r
-except ImportError:\r
- dbm = None\r
-try:\r
- import gdbm\r
-except ImportError:\r
- gdbm = None\r
-try:\r
- import anydbm\r
-except ImportError:\r
- anydbm = None\r
-import sys\r
-try:\r
- import cPickle as pickle\r
-except ImportError:\r
- import pickle\r
-\r
-prog = sys.argv[0]\r
-\r
-def usage():\r
- sys.stderr.write(__doc__ % globals())\r
-\r
-def main(args):\r
- try:\r
- opts, args = getopt.getopt(args, "hbrdag",\r
- ["hash", "btree", "recno", "dbm", "anydbm",\r
- "gdbm"])\r
- except getopt.error:\r
- usage()\r
- return 1\r
-\r
- if len(args) == 0 or len(args) > 2:\r
- usage()\r
- return 1\r
- elif len(args) == 1:\r
- pfile = sys.stdin\r
- dbfile = args[0]\r
- else:\r
- try:\r
- pfile = open(args[0], 'rb')\r
- except IOError:\r
- sys.stderr.write("Unable to open %s\n" % args[0])\r
- return 1\r
- dbfile = args[1]\r
-\r
- dbopen = None\r
- for opt, arg in opts:\r
- if opt in ("-h", "--hash"):\r
- try:\r
- dbopen = bsddb.hashopen\r
- except AttributeError:\r
- sys.stderr.write("bsddb module unavailable.\n")\r
- return 1\r
- elif opt in ("-b", "--btree"):\r
- try:\r
- dbopen = bsddb.btopen\r
- except AttributeError:\r
- sys.stderr.write("bsddb module unavailable.\n")\r
- return 1\r
- elif opt in ("-r", "--recno"):\r
- try:\r
- dbopen = bsddb.rnopen\r
- except AttributeError:\r
- sys.stderr.write("bsddb module unavailable.\n")\r
- return 1\r
- elif opt in ("-a", "--anydbm"):\r
- try:\r
- dbopen = anydbm.open\r
- except AttributeError:\r
- sys.stderr.write("anydbm module unavailable.\n")\r
- return 1\r
- elif opt in ("-g", "--gdbm"):\r
- try:\r
- dbopen = gdbm.open\r
- except AttributeError:\r
- sys.stderr.write("gdbm module unavailable.\n")\r
- return 1\r
- elif opt in ("-d", "--dbm"):\r
- try:\r
- dbopen = dbm.open\r
- except AttributeError:\r
- sys.stderr.write("dbm module unavailable.\n")\r
- return 1\r
- if dbopen is None:\r
- if bsddb is None:\r
- sys.stderr.write("bsddb module unavailable - ")\r
- sys.stderr.write("must specify dbtype.\n")\r
- return 1\r
- else:\r
- dbopen = bsddb.hashopen\r
-\r
- try:\r
- db = dbopen(dbfile, 'c')\r
- except bsddb.error:\r
- sys.stderr.write("Unable to open %s. " % dbfile)\r
- sys.stderr.write("Check for format or version mismatch.\n")\r
- return 1\r
- else:\r
- for k in db.keys():\r
- del db[k]\r
-\r
- while 1:\r
- try:\r
- (key, val) = pickle.load(pfile)\r
- except EOFError:\r
- break\r
- db[key] = val\r
-\r
- db.close()\r
- pfile.close()\r
-\r
- return 0\r
-\r
-if __name__ == "__main__":\r
- sys.exit(main(sys.argv[1:]))\r