home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 14 / hacker14.iso / programacao / pythonwin / python.exe / DB2PICKLE.PY < prev    next >
Encoding:
Python Source  |  2003-06-20  |  3.1 KB  |  117 lines

  1. #!/usr/bin/env python
  2.  
  3. """
  4. Synopsis: %(prog)s [-h|-b|-r] dbfile [ picklefile ]
  5.  
  6. Convert the database file given on the command line to a pickle
  7. representation.  The optional flags indicate the type of the database (hash,
  8. btree, recno).  The default is hash.  If a pickle file is named it is opened
  9. for write access (deleting any existing data).  If no pickle file is named,
  10. the pickle output is written to standard output.
  11.  
  12. """
  13.  
  14. import getopt
  15. try:
  16.     import bsddb
  17. except ImportError:
  18.     bsddb = None
  19. try:
  20.     import dbm
  21. except ImportError:
  22.     dbm = None
  23. try:
  24.     import anydbm
  25. except ImportError:
  26.     anydbm = None
  27. import sys
  28. try:
  29.     import cPickle as pickle
  30. except ImportError:
  31.     import pickle
  32.  
  33. prog = sys.argv[0]
  34.  
  35. def usage():
  36.     sys.stderr.write(__doc__ % globals())
  37.  
  38. def main(args):
  39.     try:
  40.         opts, args = getopt.getopt(args, "hbrda",
  41.                                    ["hash", "btree", "recno", "dbm", "anydbm"])
  42.     except getopt.error:
  43.         usage()
  44.         return 1
  45.  
  46.     if len(args) == 0 or len(args) > 2:
  47.         usage()
  48.         return 1
  49.     elif len(args) == 1:
  50.         dbfile = args[0]
  51.         pfile = sys.stdout
  52.     else:
  53.         dbfile = args[0]
  54.         try:
  55.             pfile = open(args[1], 'wb')
  56.         except IOError:
  57.             sys.stderr.write("Unable to open %s\n" % args[1])
  58.             return 1
  59.  
  60.     dbopen = None
  61.     for opt, arg in opts:
  62.         if opt in ("-h", "--hash"):
  63.             try:
  64.                 dbopen = bsddb.hashopen
  65.             except AttributeError:
  66.                 sys.stderr.write("bsddb module unavailable.\n")
  67.                 return 1
  68.         elif opt in ("-b", "--btree"):
  69.             try:
  70.                 dbopen = bsddb.btopen
  71.             except AttributeError:
  72.                 sys.stderr.write("bsddb module unavailable.\n")
  73.                 return 1
  74.         elif opt in ("-r", "--recno"):
  75.             try:
  76.                 dbopen = bsddb.rnopen
  77.             except AttributeError:
  78.                 sys.stderr.write("bsddb module unavailable.\n")
  79.                 return 1
  80.         elif opt in ("-a", "--anydbm"):
  81.             try:
  82.                 dbopen = anydbm.open
  83.             except AttributeError:
  84.                 sys.stderr.write("anydbm module unavailable.\n")
  85.                 return 1
  86.         elif opt in ("-d", "--dbm"):
  87.             try:
  88.                 dbopen = dbm.open
  89.             except AttributeError:
  90.                 sys.stderr.write("dbm module unavailable.\n")
  91.                 return 1
  92.     if dbopen is None:
  93.         if bsddb is None:
  94.             sys.stderr.write("bsddb module unavailable - ")
  95.             sys.stderr.write("must specify dbtype.\n")
  96.             return 1
  97.         else:
  98.             dbopen = bsddb.hashopen
  99.  
  100.     try:
  101.         db = dbopen(dbfile, 'r')
  102.     except bsddb.error:
  103.         sys.stderr.write("Unable to open %s.  " % dbfile)
  104.         sys.stderr.write("Check for format or version mismatch.\n")
  105.         return 1
  106.  
  107.     for k in db.keys():
  108.         pickle.dump((k, db[k]), pfile, 1==1)
  109.  
  110.     db.close()
  111.     pfile.close()
  112.  
  113.     return 0
  114.  
  115. if __name__ == "__main__":
  116.     sys.exit(main(sys.argv[1:]))
  117.