确定变量是打开的文件指针还是字符串
我想写一个函数来计算文件的md5哈希值,这个函数可以接收一个字符串,表示文件的完整路径,或者一个已经打开的文件指针。
目前,我的函数只接受字符串:
def getMD5Hash(fname):
""" Returns an md5 hash
"""
try:
with open(fname,'rb') as fo:
md5 = hashlib.md5()
chunk_sz = md5.block_size * 128
data = fo.read(chunk_sz)
while data:
md5.update(data)
data = fo.read(chunk_sz)
md5hash = base64.urlsafe_b64encode(md5.digest()).decode('UTF-8').rstrip('=\n')
except IOError:
md5hash = None
我该怎么判断fname
是一个字符串还是一个打开的文件指针呢?
1 个回答
4
Python有几种不同的类似文件的类型,比如file
、StringIO
、io.TextIOWrapper
等等。这就让我们很难直接问“这是不是一个文件?”更好的方式是问“这是不是一个字符串?”然后假设那些不是字符串的东西就是文件。
def getMD5Hash(fname):
if isinstance(fname, str):
# It's a string!
else:
# I guess it's a file, then.