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

时间:2014-06-30 21:59:55

标签: python

我想编写一个函数来计算文件的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 个答案:

答案 0 :(得分:4)

Python有几种不同的类似文件的类型(fileStringIOio.TextIOWrapper等),这使得问及这是一个文件?"难。相反,问一下#34;这是一个字符串吗?"并假设任何不必是文件:

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