cinap_lenrekadd hg and python4bb9e2215 years agoHistory
135 lines · 3.5 KB · Python
RawDownload
#!/usr/bin/env python """Synopsis: %(prog)s [-h|-g|-b|-r|-a] dbfile [ picklefile ] Convert the database file given on the command line to a picklerepresentation.  The optional flags indicate the type of the database:     -a - open using anydbm    -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 writeaccess (deleting any existing data).  If no pickle file is named, the pickleoutput is written to standard output. """ import getopttry:    import bsddbexcept ImportError:    bsddb = Nonetry:    import dbmexcept ImportError:    dbm = Nonetry:    import gdbmexcept ImportError:    gdbm = Nonetry:    import anydbmexcept ImportError:    anydbm = Noneimport systry:    import cPickle as pickleexcept 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("anydbm module unavailable.\n")                return 1        elif opt in ("-g", "--gdbm"):            try:                dbopen = gdbm.open            except AttributeError:                sys.stderr.write("gdbm module unavailable.\n")                return 1        elif opt in ("-d", "--dbm"):            try:                dbopen = dbm.open            except AttributeError:                sys.stderr.write("dbm 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:]))