为什么我不能从一个文件夹中读取多个 HDF5 文件?同时,我可以很好地读取单个 HDF5 文件... (Python 3.7)
Why can't I read multiple HDF5 files from a folder? Meanwhile, I can read a single HDF5 file fine... (Python 3.7)
我在使用某些代码读取存储在一个目录中的多个 HDF5 文件时遇到问题。我希望能够读取所有这些数据,然后打印存储在 HDF5 文件中的数据集之一。我有一个充满相同 HDF5 文件的文件夹(相同的 4 个数据集,每个数据集具有相同的形状)但它们的数据不同(每个数据集存储不同的值)。为什么我在 运行 执行此操作时遇到错误?
import h5py
import numpy as np
import os
directory = '/Users/folder'
# for i in os.listdir(directory):
for i in directory:
# if i.endswith('.h5'):
with h5py.File(i, 'r') as data:
extent = np.array(np.degrees(data['extent']))
print(extent)
这是第一个代码片段的错误:
OSError: Unable to open file (file read failed: time = Thu May 14 12:46:54 2020
, filename = '/', file descriptor = 61, errno = 21, error message = 'Is a directory', buf = 0x7ffee42433b8, total read size = 8, bytes this sub-read = 8, bytes actually read = 18446744073709551615, offset = 0)
但我可以 运行 这在单个 HDF5 文件上很好...
file = 'file.h5'
data = h5py.File(file,'r')
extent = np.array(np.degrees(data['extent']))
print(extent)
它输出的正是它应该是的:
[ 1. 14. 180. -180.]
for i in directory
遍历字符串中的字符。所以['/', 'U', 's', ...]
。该错误告诉您它打开了 /
但它是一个目录,而不是一个文件。您注释掉的 os.listdir(directory)
在正确的轨道上,但是需要将产生的文件名附加到基本目录以构成完整路径。你可能想要
for i in os.listdir(directory):
if i.endswith('.h5'):
with h5py.File(os.path.join(directory, i)) as data:
...
我更喜欢 glob()
而不是 os.listdir()
。为什么?因为您可以在文件名中使用通配符,并将目录包含在搜索中(无需在打开文件时将目录连接到文件名)。
- glob.glob() returns 一个列表
- glob.iglob() returns 一个迭代器(我更喜欢这种情况)
上面用 glob 重做的例子:
import glob
for h5f in glob.iglob(directory+'/*.h5'):
with h5py.File(h5f) as data:
...
我在使用某些代码读取存储在一个目录中的多个 HDF5 文件时遇到问题。我希望能够读取所有这些数据,然后打印存储在 HDF5 文件中的数据集之一。我有一个充满相同 HDF5 文件的文件夹(相同的 4 个数据集,每个数据集具有相同的形状)但它们的数据不同(每个数据集存储不同的值)。为什么我在 运行 执行此操作时遇到错误?
import h5py
import numpy as np
import os
directory = '/Users/folder'
# for i in os.listdir(directory):
for i in directory:
# if i.endswith('.h5'):
with h5py.File(i, 'r') as data:
extent = np.array(np.degrees(data['extent']))
print(extent)
这是第一个代码片段的错误:
OSError: Unable to open file (file read failed: time = Thu May 14 12:46:54 2020
, filename = '/', file descriptor = 61, errno = 21, error message = 'Is a directory', buf = 0x7ffee42433b8, total read size = 8, bytes this sub-read = 8, bytes actually read = 18446744073709551615, offset = 0)
但我可以 运行 这在单个 HDF5 文件上很好...
file = 'file.h5'
data = h5py.File(file,'r')
extent = np.array(np.degrees(data['extent']))
print(extent)
它输出的正是它应该是的:
[ 1. 14. 180. -180.]
for i in directory
遍历字符串中的字符。所以['/', 'U', 's', ...]
。该错误告诉您它打开了 /
但它是一个目录,而不是一个文件。您注释掉的 os.listdir(directory)
在正确的轨道上,但是需要将产生的文件名附加到基本目录以构成完整路径。你可能想要
for i in os.listdir(directory):
if i.endswith('.h5'):
with h5py.File(os.path.join(directory, i)) as data:
...
我更喜欢 glob()
而不是 os.listdir()
。为什么?因为您可以在文件名中使用通配符,并将目录包含在搜索中(无需在打开文件时将目录连接到文件名)。
- glob.glob() returns 一个列表
- glob.iglob() returns 一个迭代器(我更喜欢这种情况)
上面用 glob 重做的例子:
import glob
for h5f in glob.iglob(directory+'/*.h5'):
with h5py.File(h5f) as data:
...