📄 whichdb.py
字号:
# Portions Copyright (c) 2005 Nokia Corporation
"""Guess which db package to use to open a db file."""
import os
def whichdb(filename):
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
# Check for e32dbm
try:
if not filename.endswith('.e32dbm'):
name=filename+".e32dbm"
else:
name=filename
f=open(name,"rb")
f.close()
return "e32dbm"
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -