首页 > 解决方案 > 麻烦通过子目录循环 xarray 数据帧

问题描述

我正在尝试通过循环遍历子目录来制作大数据框。我想要:

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')

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

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

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

文件“/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()

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

netCDF4._netCDF4.Dataset 中的文件“netCDF4/_netCDF4.pyx”,第 2123 行。在里面

文件“netCDF4/_netCDF4.pyx”,第 1743 行,在 netCDF4._netCDF4._ensure_nc_success

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

谁能帮我解决这个问题。先感谢您。

标签: pythonloopspython-xarraynetcdf4

解决方案


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,并忽略其他文件。


推荐阅读