【发布时间】:2018-04-23 21:33:16
【问题描述】:
我有一个文件夹,其中包含 2006-2100 年的 NetCDF 文件,以十年为单位(2011-2020、2021-2030 等)。
我想创建一个包含所有这些文件的新 NetCDF 文件。到目前为止,我已经阅读了文件:
ds = xarray.open_dataset('Path/to/file/20062010.nc')
ds1 = xarray.open_dataset('Path/to/file/20112020.nc')
etc.
然后像这样合并它们:
dsmerged = xarray.merge([ds,ds1])
这可行,但很笨重,必须有一种更简单的方法来自动化这个过程,因为我将为许多不同的文件夹执行此操作。有没有更有效的方法来做到这一点?
编辑:
尝试使用 glob 加入这些文件:
for filename in glob.glob('path/to/file/.*nc'):
dsmerged = xarray.merge([filename])
给出错误:
AttributeError: 'str' object has no attribute 'items'
这只是读取文件名的文本,而不是实际文件本身,所以它不能合并它。如何打开,存储为变量,然后不一点一点地合并?
【问题讨论】:
-
dsmerged = xarray.merge([xarray.open_dataset(f) for f in glob.glob('path/to/file/.*nc')])怎么样? -
好吧,这几乎让我的电脑崩溃了,在未崩溃后它说
memory error:- 这可能是由于文件的大小?也许我的电脑不能处理这个? -
您的文件数量超出了机器的内存容量可以处理的范围。您可以通过缩短要处理的文件数来测试我提供的代码是否真的有效,如下所示:
dsmerged = xarray.merge([xarray.open_dataset(f) for f in glob.glob('path/to/file/.*nc')[:2]])。在这种情况下,您只处理两个文件。至于您的记忆问题,我建议您查看this。 -
我用更少的文件尝试过,它可以工作!谢谢你。我也会按照您的建议尝试解决内存问题。
-
如果您使用
xarray.open_mfdataset,则不需要xarray.merge操作。xarray.open_mfdataset已经在处理它。只需dsmerged = xarray.open_mfdataset('path/to/file/*.nc')就足够了。
标签: python join merge python-xarray