确定变量是打开的文件指针还是字符串

2 投票
1 回答
949 浏览
提问于 2025-04-18 11:39

我想写一个函数来计算文件的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有几种不同的类似文件的类型,比如fileStringIOio.TextIOWrapper等等。这就让我们很难直接问“这是不是一个文件?”更好的方式是问“这是不是一个字符串?”然后假设那些不是字符串的东西就是文件。

def getMD5Hash(fname):
    if isinstance(fname, str):
        # It's a string!
    else:
        # I guess it's a file, then.

撰写回答