当前位置: 首页 > 面试题库 >

python netcdf:复制所有变量和属性,但复制一个

路雅懿
2023-03-14
问题内容

我需要在netcdf文件中处理一个实际上包含许多属性和变量的变量。我认为无法更新netcdf文件

我的方法如下:

  1. 从原始文件获取要处理的变量
  2. 处理变量
  3. 将所有数据从原始netcdf复制,但将已处理的变量复制到最终文件
  4. 将已处理的变量复制到最终文件

我的问题是对步骤3进行编码。我从以下内容开始:

def  processing(infile, variable, outfile):
        data = fileH.variables[variable][:]

        # do processing on data...

        # and now save the result
        fileH = NetCDFFile(infile, mode="r")
        outfile = NetCDFFile(outfile, mode='w')
        # build a list of variables without the processed variable
        listOfVariables = list( itertools.ifilter( lamdba x:x!=variable , fileH.variables.keys() ) )
        for ivar in listOfVariables:
             # here I need to write each variable and each attribute

如何在不重建整个数据结构的情况下将所有数据和属性保存在完整的代码中?


问题答案:

这就是我刚刚使用和工作的内容。@arne的答案已针对Python 3更新,还包括复制变量属性:

import netCDF4 as nc
toexclude = ['ExcludeVar1', 'ExcludeVar2']

with netCDF4.Dataset("in.nc") as src, netCDF4.Dataset("out.nc", "w") as dst:
    # copy global attributes all at once via dictionary
    dst.setncatts(src.__dict__)
    # copy dimensions
    for name, dimension in src.dimensions.items():
        dst.createDimension(
            name, (len(dimension) if not dimension.isunlimited() else None))
    # copy all file data except for the excluded
    for name, variable in src.variables.items():
        if name not in toexclude:
            x = dst.createVariable(name, variable.datatype, variable.dimensions)
            dst[name][:] = src[name][:]
            # copy variable attributes all at once via dictionary
            dst[name].setncatts(src[name].__dict__)


 类似资料:
  • 问题内容: 在Dockerfile中,我有 我想排除整个目录,例如我的node_modules目录。 像这样: Docker有可能吗? 问题答案: 在您的docker build上下文目录中创建文件(因此,在这种情况下,很可能是node_modules的父目录),其中只有一行: 尽管您可能只想: 有关dockerignore的信息:https ://docs.docker.com/engine/r

  • 问题内容: 鉴于以下Dockerfile 在复制的测试目录中,我已将文件许可权设置为770。 如果在容器内进行操作,则无法访问测试目录中的任何文件或子目录。似乎此问题与aufs文件系统中的所有权有关,在该文件系统中,复制的目录仍然由root拥有,并且权限设置为770。 是否有解决此问题的方法以正确设置权限?一种可能是在复制之前将原始目录的权限设置为容器用户的uid。但这似乎更像是一种hack。 问

  • 它发生在 我不明白为什么我会犯这样的错误?如何修改此代码? 回溯: 谢谢你的帮助!

  • 《复制增量》又是一款受到《反物质维度》启发的放置游戏。

  • 属性与Java中的字段是相同的,但是更加强大。属性做的事情是字段加上getter加上setter。我们通过一个例子来比较他们的不同之处。这是Java中字段安全访问和修改所需要的代码: public class Person { private String name; public String getName() { return name; }

  • 变量可以很简单地定义成可变(var)和不可变(val)的变量。这个与Java中使用的final很相似。但是不可变在Kotlin(和其它很多现代语言)中是一个很重要的概念。 一个不可变对象意味着它在实例化之后就不能再去改变它的状态了。如果你需要一个这个对象修改之后的版本,那就会再创建一个新的对象。这个让编程更加具有健壮性和预估性。在Java中,大部分的对象是可变的,那就意味着任何可以访问它这个对象的