使用程序读写hdf5文件报错 OSError: [Errno 37] Unable to synchronously create file

使用程序读写hdf5文件报错 OSError: [Errno 37] Unable to synchronously create file (unable to lock file, errno = 37, error message = ‘No locks available’)

测试python程序

import h5py 
import numpy as np
data_matrix = np.random.uniform(-1, 1, size=(2, 2))

# Write data to HDF5
data_file = h5py.File('file.hdf5', 'w')
data_file.create_dataset('group_name', data=data_matrix)
data_file.close()

filename = 'file.hdf5'
f = h5py.File(filename, 'r')

# List all groups
print("Keys: %s" % f.keys())
a_group_key = list(f.keys())[0]

# Get the data
data = list(f[a_group_key])
print(data)

运行后,报错

Traceback (most recent call last):
  File "/opt/data/private/hdf_test/test.py", line 6, in <module>
    data_file = h5py.File('file.hdf5', 'w')
  File "/opt/conda/lib/python3.10/site-packages/h5py/_hl/files.py", line 562, in __init__
    fid = make_fid(name, mode, userblock_size, fapl, fcpl, swmr=swmr)
  File "/opt/conda/lib/python3.10/site-packages/h5py/_hl/files.py", line 241, in make_fid
    fid = h5f.create(name, h5f.ACC_TRUNC, fapl=fapl, fcpl=fcpl)
  File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
  File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
  File "h5py/h5f.pyx", line 122, in h5py.h5f.create
OSError: [Errno 37] Unable to synchronously create file (unable to lock file, errno = 37, error message = 'No locks available')

解决方法:
在终端输入:

export HDF5_USE_FILE_LOCKING=FALSE

再次运行程序返回:

root@interactive90765:/opt/data/private/hdf_test# python test.py 
Keys: <KeysViewHDF5 ['group_name']>
[array([ 0.68818786, -0.35534535]), array([-0.99607473, -0.23781375])]

如果通过VSCODE或者PyCharm 客户端远程连接服务器调试程序,需要断开重新连接后,再跑程序。

以上添加只是临时生效,需要永久生效可以将 export HDF5_USE_FILE_LOCKING=FALSE 添加到 .bashrc 后永久生效。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 这个问题可能是由于您在使用 HDF5 存储时,使用了包含对象的数据类型,而 HDF5 不支持对象数据类型。您可以尝试将数据类型转换为 HDF5 支持的数据类型,例如浮点数或整数。如果您需要更多帮助,请查看 HDF5 的文档或寻求相关技术支持。 ### 回答2: 这个报错是由于在使用HDF5存储数据时,出现了某个数据类型的不匹配问题。一般来说,HDF5支持常见的数据类型,例如整数、浮点数、字符串等,但是对于一些特殊的数据类型,可能没有对应的HDF5本地等效类型。 出现这个报错的原因可能有两种情况。第一种情况是在创建HDF5数据集时,传入了一个包含不支持的数据类型的对象,例如对象数组(Object Array)。HDF5无法直接表示对象数组,因此会报错。解决这个问题的方法是将对象数组转换为HDF5支持的数据类型,例如将对象数组转换为字符串数组或者其他合适的数据类型。 第二种情况是在读取HDF5数据集时,数据集中包含了不支持的数据类型。这可能是由于HDF5文件在其他系统上创建时使用了不同的数据类型,导致当前系统无法识别。为了解决这个问题,可以尝试使用不同的HDF5读取工具或者库来读取文件,或者将文件转换为其他格式再进行处理。 总之,这个错误是由于HDF5不支持特定数据类型导致的。解决这个问题的方法是将不支持的数据类型转换为HDF5支持的数据类型,或者使用其他工具或方法来处理数据。 ### 回答3: 这个错误是由于在使用hdf5处理数据时,遇到了Object类型的数据,而hdf5不支持这种类型的数据。在HDF5中,只支持一些基本类型的数据,如整数、浮点数、字符串等。而Object类型是一个动态对象类型,它可以存储任意类型的数据。因此,当我们尝试使用Object类型的数据在hdf5中进行操作时,就会出现TypeError: Object dtype dtype('O') has no native HDF5 equivalent的错误。 要解决这个问题,有两种方法可以尝试: 1. 转换数据类型:可以尝试将Object类型的数据转换为hdf5支持的基本数据类型,如将对象转换为字符串或整数等。这样,就可以避免使用Object类型的数据,从而解决该错误。 2. 使用其他数据格式:如果数据中包含Object类型的数据,而且必须保留这些数据类型,可以考虑使用其他格式来存储和处理数据,如pickle、json等。这些格式可以保存任意类型的数据,包括Object类型,从而解决该错误。 总之,TypeError: Object dtype dtype('O') has no native HDF5 equivalent出现时,说明有Object类型的数据参与了hdf5的操作。要解决这个问题,可以尝试将数据类型转换为hdf5支持的基本类型,或者考虑使用其他数据格式来处理数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值