You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Zarr Group的字节大小?

获取Zarr Group所占字节大小的方法

下面提供几种不同场景下的实现方式,按需选择:

方法一:计算实际存储的压缩后大小(适用于文件系统/支持size查询的存储)

这种方式直接读取底层存储的文件/对象大小,得到的是Zarr Group实际占用的存储空间:

import zarr
import os

def calculate_zarr_group_storage_size(group):
    total_bytes = 0
    # 遍历存储中的所有键
    for key in group.store:
        # 处理DirectoryStore(本地文件系统)
        if isinstance(group.store, zarr.DirectoryStore):
            file_path = os.path.join(group.store.path, key)
            if os.path.isfile(file_path):
                total_bytes += os.path.getsize(file_path)
        # 处理支持getsize方法的存储(如ZipStore、部分云存储)
        elif hasattr(group.store, 'getsize'):
            total_bytes += group.store.getsize(key)
    return total_bytes

# 使用示例
zarr_group = zarr.open_group("/path/to/your/zarr/group", mode='r')
print(f"Zarr Group实际存储大小: {calculate_zarr_group_storage_size(zarr_group)} 字节")

方法二:计算未压缩的原始数据大小

如果需要知道数据未压缩时的总字节数,可以通过数组的元数据直接计算,无需访问底层存储:

import zarr

def calculate_zarr_group_uncompressed_size(group):
    total_bytes = 0

    def traverse_zarr_node(node):
        nonlocal total_bytes
        if isinstance(node, zarr.Array):
            # 数组总字节数 = 元素数量 × 单个元素字节数
            total_bytes += node.size * node.dtype.itemsize
        elif isinstance(node, zarr.Group):
            # 递归遍历所有子节点
            for child in node.values():
                traverse_zarr_node(child)
    
    traverse_zarr_node(group)
    return total_bytes

# 使用示例
zarr_group = zarr.open_group("/path/to/your/zarr/group", mode='r')
print(f"Zarr Group未压缩数据大小: {calculate_zarr_group_uncompressed_size(zarr_group)} 字节")

方法三:基于Dask-Zarr的快速计算

如果你的Zarr Group已经和Dask结合使用,可以直接通过Dask数组的nbytes属性累加:

import dask.array as da
import zarr

zarr_group = zarr.open_group("/path/to/your/zarr/group", mode='r')
# 遍历Group内所有数组并转为Dask数组
dask_arrays = [da.from_zarr(zarr_group[arr_name]) for arr_name in zarr_group]
# 累加所有数组的未压缩字节数
total_uncompressed_size = sum(arr.nbytes for arr in dask_arrays)
print(f"总未压缩数据大小: {total_uncompressed_size} 字节")

注意事项

  • 若Zarr使用了压缩算法(如Blosc、GZIP),方法一的结果是压缩后的实际占用空间,方法二、三的结果是原始未压缩数据大小,两者差异取决于压缩率。
  • 对于S3等云存储后端,需要确保对应的Zarr Store实现支持getsize方法,或结合云存储SDK单独获取对象大小。

内容的提问来源于stack exchange,提问作者aaxx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 07:03:33