whichdb.py

来自「mallet是自然语言处理、机器学习领域的一个开源项目。」· Python 代码 · 共 84 行

PY
84
字号
"""Guess which db package to use to open a db file."""import osdef whichdb(filename):    """Guess which db package to use to open a db file.    Return values:    - None if the database file can't be read;    - empty string if the file can be read but can't be recognized    - the module name (e.g. "dbm" or "gdbm") if recognized.    Importing the given module may still fail, and opening the    database using that module may still fail.    """    import struct    # Check for dbm first -- this has a .pag and a .dir file    try:        f = open(filename + os.extsep + "pag", "rb")        f.close()        f = open(filename + os.extsep + "dir", "rb")        f.close()        return "dbm"    except IOError:        pass    # Check for dumbdbm next -- this has a .dir and and a .dat file    try:        f = open(filename + os.extsep + "dat", "rb")        f.close()        f = open(filename + os.extsep + "dir", "rb")        try:            if f.read(1) in ["'", '"']:                return "dumbdbm"        finally:            f.close()    except IOError:        pass    # See if the file exists, return None if not    try:        f = open(filename, "rb")    except IOError:        return None    # Read the start of the file -- the magic number    s16 = f.read(16)    f.close()    s = s16[0:4]    # Return "" if not at least 4 bytes    if len(s) != 4:        return ""    # Convert to 4-byte int in native byte order -- return "" if impossible    try:        (magic,) = struct.unpack("=l", s)    except struct.error:        return ""    # Check for GNU dbm    if magic == 0x13579ace:        return "gdbm"    # Check for BSD hash    if magic in (0x00061561, 0x61150600):        return "dbhash"    # BSD hash v2 has a 12-byte NULL pad in front of the file type    try:        (magic,) = struct.unpack("=l", s16[-4:])    except struct.error:        return ""    # Check for BSD hash    if magic in (0x00061561, 0x61150600):        return "dbhash"    # Unknown    return ""

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?