HDF4(.nc)文件完整性检验

最近在下一些.nc文件,但下载的时候服务器并没有把文件大小传过来,也无法断点续传。对下载到的文件到底有没有下完整,无法判定。同时也想到以前帮师兄下一些数据的时候也遇到过这个问题,但当时也没有注意,直接就把数据交过去了,导致师兄后期在用数据的时候才发现有些文件没有下完整。
今天又研究了一番hdf文件,发现文件大小其实是已经写到文件里了,hdf文件的第40到第44个字节记录了文件的大小。所以想到了一个简单的办法:根据文件自身记录的大小与实际下载到的大小进行比较,相等视为下载完整;不一样则删除重新下载。python代码如下:

# Check hdf4 file by comparing sizes
import os,struct,glob

for file in glob.glob('*.nc'):
    f = open(file,'rb')
    data = f.read(40)
    data = f.read(4)
    int_size = struct .unpack('i',data)[0]
    act_size = os.path.getsize(file)
    f.close()
    if int_size!=act_size:
        print('{} is truncted should be = {} actual = {}'.format(file,int_size,act_size))
        os.remove(file)
    else:
        #print(file,int_size,act_size)
        pass
    
input('Any key to continue...')

理论上来说,文件大小相等不等于文件没有损坏,而hdf文件是不具备纠错和自检功能的。搜索的时候发现,有人根据hdf其他的一些特性来校验文件,比如Check HDF5 files for corruption,不过这个就等后续改进吧。当下暂且以文件大小来检验。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 要将HDF文件转换为NC4文件,可以使用Python中的netCDF4库来实现。 首先,确保已经安装了netCDF4库。可以使用以下命令来安装: ``` pip install netCDF4 ``` 然后,可以使用以下代码将HDF文件转换为NC4文件: ```python import netCDF4 # 打开HDF文件 hdf_file = netCDF4.Dataset('input.hdf', 'r') # 创建NC4文件 nc4_file = netCDF4.Dataset('output.nc', 'w', format='NETCDF4') # 复制HDF文件中的维度信息到NC4文件 for dimension_name, dimension in hdf_file.dimensions.items(): nc4_file.createDimension(dimension_name, len(dimension)) # 复制HDF文件中的变量信息到NC4文件 for variable_name, variable in hdf_file.variables.items(): nc4_variable = nc4_file.createVariable(variable_name, variable.dtype, variable.dimensions) nc4_variable[:] = variable[:] # 复制HDF文件中的全局属性到NC4文件 nc4_file.setncatts(hdf_file.__dict__) # 关闭文件 hdf_file.close() nc4_file.close() print("HDF文件转换为NC4文件成功!") ``` 请将上述代码中的`'input.hdf'`替换为实际的HDF文件路径,并将`'output.nc'`替换为希望生成的NC4文件路径。 以上代码将打开HDF文件,创建一个相应的NC4文件,并将HDF文件中的维度、变量和全局属性复制到NC4文件中。最后,关闭文件并输出成功信息。 希望以上回答能对你有所帮助! ### 回答2: 将HDF文件转换为NC4文件的过程非常简单,只需要遵循以下步骤: 1. 首先,确保你的计算机上已经安装了HDF和NetCDF库。这两个库是进行文件格式转换所必需的。 2. 打开Python环境,导入所需的库: ```python import h5py import netCDF4 as nc ``` 3. 使用h5py库打开HDF文件: ```python hdf_file = h5py.File('input.hdf', 'r') ``` 4. 创建一个新的NC4文件,将HDF数据写入其中: ```python nc_file = nc.Dataset('output.nc', 'w') ``` 5. 遍历HDF文件中的数据集,并将其转换为NC4文件格式: ```python for dataset_name in hdf_file.keys(): dataset = hdf_file[dataset_name] nc_dataset = nc_file.createVariable(dataset_name, dataset.dtype, dataset.shape) nc_dataset[:] = dataset[:] ``` 6. 保存并关闭NC4文件: ```python nc_file.close() ``` 7. 关闭HDF文件: ```python hdf_file.close() ``` 这样,你就成功地将HDF文件转换为NC4文件。请注意,需要根据你的实际情况替换`input.hdf`和`output.nc`为你想要转换的文件的名称。此外,如果HDF文件中存在多个数据集,可以在循环中逐个处理它们。 ### 回答3: 将HDF文件转换为NC4文件的步骤如下: 1. 安装h5py和netCDF4两个Python库。可以使用以下命令来安装: ``` pip install h5py netCDF4 ``` 2. 导入所需的库: ```python import h5py from netCDF4 import Dataset ``` 3. 打开HDF文件并读取其中的数据: ```python hdf_file = h5py.File('input.hdf', 'r') data = hdf_file['data'][:] hdf_file.close() ``` 4. 创建一个新的NC4文件并将数据写入其中: ```python nc4_file = Dataset('output.nc', 'w', format='NETCDF4') nc4_file.createDimension('time', None) # 设置时间维度,此处为可变长度 nc4_file.createVariable('data', 'float', ('time',)) # 创建数据变量 nc4_file.variables['data'][:] = data # 将数据写入变量 nc4_file.close() ``` 5. 在上述代码中,'input.hdf'是输入的HDF文件名,'output.nc'是输出的NC4文件名。根据实际情况修改这两个文件名。 以上是将HDF文件转换为NC4文件的简单步骤。根据具体的HDF文件结构和数据类型,可能还需要进行一些额外的操作。可以根据具体的需求对代码进行修改。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值