一次获取filesize和md5哈希,只读取一次文件

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

标签: 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

  return md5hash

size = os.path.getsize(fname)
hash = getMD5Hash(fname)

但是,据我所知,这需要两次传递文件,效率更高。

1 个答案:

答案 0 :(得分:3)

不必扫描文件以获取其长度。文件系统知道文件有多大。

如果您坚持手动执行此操作,请设置size = 0,然后在size += len(data)循环中执行while

当然,您的getMD5Hash()现在是getMD5Hash_and_size()