麻烦通过子目录循环xarray数据框

时间:2018-12-04 19:41:41

标签: python loops python-xarray netcdf4

我试图通过遍历子目录来制作一个大数据框。我要:

i)从子目录中的所有文件(扩展名为.nc)读取数据, ii)选择一个特定的块 iii)将其保存在output.nc文件中。

import os
import xarray as xr
import numpy as np

rootdir ='/Users/sm/Desktop/along_track_J2'

data_new=[]

for subdir, dirs, files in os.walk(rootdir):

    for file in files:

        file_name= os.path.join(subdir, file)  

        df=xr.open_dataset(file_name)

        df['longitude'] = ((df.longitude + 180) % 360 - 180).sortby(df.longitude)

        ds=df.where((df.longitude>=-65) & (df.longitude<=-45) & (df.latitude>55), drop=True)

        data_new.append(ds)

以某种方式xarray无法读取文件,我看到以下错误:

  

文件“”,第1行,在       runfile('/ Users / sm / Desktop / jason2_processing.py',wdir ='/ Users / sm / Desktop')

     

runfile中的文件“ /Users/sm/anaconda3/lib/python3.7/site-packages/spyder_kernels/customize/spydercustomize.py”,第668行       execfile(文件名,命名空间)

     

exec文件中的文件“ /Users/sm/anaconda3/lib/python3.7/site-packages/spyder_kernels/customize/spydercustomize.py”,第108行       exec(compile(f.read(),文件名,'exec'),命名空间)

     

文件“ /Users/sm/Desktop/jason2_processing.py”,第18行,在       df = xr.open_dataset(文件名)

     

文件“ /Users/sm/anaconda3/lib/python3.7/site-packages/xarray/backends/api.py”,行320,位于open_dataset中       ** backend_kwargs)

     

文件“ /Users/sm/anaconda3/lib/python3.7/site-packages/xarray/backends/netCDF4_.py”,打开的第331行       ds = opener()

     

_open_netcdf4_group中的第230行,文件“ /Users/sm/anaconda3/lib/python3.7/site-packages/xarray/backends/netCDF4_.py”       ds = nc4.Dataset(文件名,mode = mode,** kwargs)

     

netCDF4._netCDF4.Dataset中的文件“ netCDF4 / _netCDF4.pyx”,第2123行。初始

     

netCDF4._netCDF4._ensure_nc_success中的文件“ netCDF4 / _netCDF4.pyx”,行1743

     

OSError:[Errno -51] NetCDF:未知文件格式:b'/ Users / sm / Desktop / along_track_J2 / .DS_Store'

有人可以帮我吗?预先谢谢你。

1 个答案:

答案 0 :(得分:0)

  

OSError:[Errno -51] NetCDF:未知文件格式:b'/ Users / sm / Desktop / along_track_J2 / .DS_Store'

您当前正在循环浏览所有文件,NetCDF和其他(系统)文件。 .DS_store是由macOS创建的文件,它不是NetCDF文件。如果只想处理NetCDF文件,则应执行以下操作:

...
for file in files:
    if file.split('.')[-1] == 'nc':
        file_name= os.path.join(subdir, file) 
        df = xr.open_dataset(file_name)
        ....

if file.split('.')[-1] == 'nc':(我唯一添加的内容)基本上检查文件扩展名是否为.nc,并忽略其他文件。