Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 确定变量是打开的文件指针还是字符串_Python - Fatal编程技术网

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

Python 确定变量是打开的文件指针还是字符串,python,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

我想编写一个函数来计算文件的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
是字符串还是打开的文件指针?

Python有几种不同的文件类型(、等),这使得询问“这是文件吗?”变得很困难。相反,询问“这是一个字符串吗?”并假设任何不是字符串的东西都必须是文件:

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

Python有几种不同的文件类型(、等),这使得询问“这是一个文件吗?”变得很困难。相反,询问“这是一个字符串吗?”并假设任何不是字符串的东西都必须是文件:

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

? ?这无法考虑类似路径的对象,例如,这无法考虑类似路径的对象,例如。