python - 麻烦通过子目录循环 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'
谁能帮我解决这个问题。先感谢您。
解决方案
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
,并忽略其他文件。
推荐阅读
- python - 如何使用 2 个条件属性使用插入排序对 python 列表进行排序?
- javascript - 从 console.log 将正则表达式匹配传递给变量
- c# - 使用 C# 中的泛型将用户定义类型转换为另一个用户定义类型
- doctrine - Symfony 4 如何实现 Doctrine XML ORM 映射
- python - 使用 Pandas 连续更改值,直到值不为 null 或 >1
- c# - 向 sqlCommand 查询添加参数
- mysql - 将 PK 合并到表中的 A 列
- angular - NGRX Angular 服务 - getter 使用 createdSelector
- ios - 如何更改应用名称并保留当前用户?
- wpf - API 设计 - 为什么 BorderBrush 对 CheckBox 没有影响?