2016-07-06 7 views
2

foll의 모든 -999.0 값을 바꾸려고합니다. netCDF 파일 0.0. 이 파일은 여기에 있습니다 :파이썬을 사용하여 netCDF 파일의 값 바꾸기

def modify_nc_value(path_inp, name_var, val_to_modify, new_value): 
    """ 
    Replace value in netCDF vriable from val_to_modify to new_value 
    Args: 
     path_inp: 
     name_var: Name of variable for which to modify value, if -1, then change all variables 
     val_to_modify: 
     new_value: 

    Returns: 

    """ 
    hndl_inp = netCDF4.Dataset(path_inp, 'r+') 

    if name_var == -1: 
     for var, varin in hndl_inp.variables.iteritems(): 
      hndl_inp[var][:][hndl_inp[var][:] == val_to_modify] = new_value 
    else: 
     hndl_inp[name_var][:][hndl_inp[name_var][:] == val_to_modify] = new_value 

    hndl_inp.close() # Write variable back to disk 

그러나, 기능이 작동하지 않는 것 : 는 https://www.dropbox.com/s/ohh7tntzm2pj1uw/all_SSP3_BaU_NoCC.nc?dl=0

여기 내 기능입니다. -999.0 값은 대체되지 않습니다. 이 문제를 해결하는 방법?

+0

변수는 항상 1D입니까? 나는 의심 스럽지만 코드는 항상 'var'을 1D로 지정합니다. 즉 [var] [:]'입니다. – N1B4

+0

변수가 3D – user308827

+0

http://unidata.github.io/netcdf4-python/#netCDF4.Dataset.sync에 언급 된대로 동기화 할 필요가 없습니까? –

답변

1

파일을 추가 모드 (r+)로 열었으므로 새로운 값만 추가 할 수 있습니다. 데이터 세트가 빠르게 커지기 때문에 실제로는 읽기/쓰기 모드가 없습니다.

  • 는, 데이터 집합을 읽고 새 파일을 엽니 다 (모드 소지품이 True, w이다), 수정을 쓸 원본 데이터 셋을 통해 다시 복사 : 당신은 두 가지 옵션이 있습니다.

  • 데이터 집합이 크고 5T를 초과하는 경우 실제로 코드를 수정하여 대신 -999.0 값을 찾습니다.

  • 방법이있을 수 있습니다. these hints을 만들지는 않았지만 행운을 누릴 수 있습니다.

행운을 빈다. 작동하게 만들면이 답변에 추가하십시오.