Python解析nc格式的文件
1、nc文件科普
NetCDF(.nc)文件可通過(guò)多種專業(yè)軟件打開(kāi),包括Panoply、GIS工具(如ArcGIS/QGIS)、編程語(yǔ)言(Python/R)以及氣象數(shù)據(jù)處理工具(如ncview、meteoinfo),但普通文本編輯器(如記事本)僅能查看原始代碼無(wú)法解析數(shù)據(jù)。
專業(yè)軟件推薦
1.1、Panoply。
- NASA開(kāi)發(fā)的跨平臺(tái)工具,專用于氣象、海洋等科學(xué)數(shù)據(jù)的可視化,支持NetCDF格式的直接讀取和圖形化展示。官網(wǎng)下載:NASA Panoply。
1.2、GIS軟件。
- ArcGIS:通過(guò)Multidimension Tools模塊轉(zhuǎn)換為柵格圖層。
- QGIS:原生支持.nc文件拖拽打開(kāi),支持?jǐn)?shù)據(jù)符號(hào)化處理。
1.3、編程工具。
- Python:使用netCDF4庫(kù)或xarray庫(kù)讀取數(shù)據(jù)。
- R語(yǔ)言:通過(guò)ncdf4包處理.nc文件。
1.4、氣象專用工具。
- ncview:輕量級(jí)Linux工具,適用于WRF模型輸出的.nc文件。
- meteoinfo:國(guó)產(chǎn)開(kāi)源軟件,支持快速讀取氣象數(shù)據(jù)。
1.5、其他工具。
- CIMCO Edit:數(shù)控編程軟件,適用于工業(yè)NC代碼編輯(非氣象數(shù)據(jù))。
- HDFView:支持部分NetCDF文件,需配合Java環(huán)境使用。
1.6、注意事項(xiàng)
- CAD軟件無(wú)法直接打開(kāi).nc文件,工業(yè)NC代碼文件(如數(shù)控加工文件)需專用轉(zhuǎn)換工具(如諾誠(chéng)NC轉(zhuǎn)換器)。
- 文本編輯器(記事本/Word)僅顯示二進(jìn)制代碼,無(wú)法解析科學(xué)數(shù)據(jù)內(nèi)容。
2、編程工具解析(目前采用的是python)
2.1、編碼環(huán)境要求
windows需要安裝hdf5,python環(huán)境需要安裝netcdf4庫(kù)。
2.1.1、hdf5安裝
https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.12 下載對(duì)應(yīng)的環(huán)境版本安裝即可
2.1.2、hdf5環(huán)境變量配置

需配置 HDF5_DIR 環(huán)境變量
2.1.3、netcdf4 類庫(kù)安裝
這時(shí)候只需要安裝編譯好的netcdf4庫(kù)的二進(jìn)制文件即可:
終端pip安裝:
# pip install netcdf4 --prefer-binary
如果是源碼安裝,可能會(huì)報(bào)錯(cuò),一定要留意一下?。?!
2.2、python環(huán)境安裝小結(jié)

3、python讀取nc文件,并保存csv
廢話不多說(shuō),直接上代碼了。
3.1、詳細(xì)查看NC文件結(jié)構(gòu)
import netCDF4 as nc
def inspect_nc_file(nc_file_path):
"""
詳細(xì)查看NC文件結(jié)構(gòu)
"""
try:
with nc.Dataset(nc_file_path, 'r') as nc_file:
print("=" * 50)
print("NC文件基本信息:")
print("=" * 50)
# 文件格式和維度
print(f"文件格式: {nc_file.data_model}")
print(f"文件維度: {nc_file.dimensions}")
print(f"文件變量: {list(nc_file.variables.keys())}")
print("\n" + "=" * 50)
print("維度詳細(xì)信息:")
print("=" * 50)
for dim_name, dim in nc_file.dimensions.items():
print(f"{dim_name}: {len(dim)} 個(gè)元素")
print("\n" + "=" * 50)
print("變量詳細(xì)信息:")
print("=" * 50)
for var_name, var in nc_file.variables.items():
print(f"\n變量名: {var_name}")
print(f" 維度: {var.dimensions}")
print(f" 形狀: {var.shape}")
print(f" 數(shù)據(jù)類型: {var.dtype}")
print(f" 屬性: {dict(var.__dict__)}")
# 顯示部分?jǐn)?shù)據(jù)樣本
if len(var.shape) <= 2: # 只顯示低維數(shù)據(jù)的樣本
sample_data = var[:]
if hasattr(sample_data, 'flatten'):
sample_data = sample_data.flatten()
print(f" 數(shù)據(jù)樣本: {sample_data[:5]}...") # 顯示前5個(gè)值
print("\n" + "=" * 50)
print("全局屬性:")
print("=" * 50)
for attr_name in nc_file.ncattrs():
print(f"{attr_name}: {getattr(nc_file, attr_name)}")
except Exception as e:
print(f"錯(cuò)誤: {e}")
# 使用示例
inspect_nc_file('wspd_2024.nc')3.2、讀取NC文件并保存CSV
注意:需根據(jù)3.1代碼的輸出格式,對(duì)應(yīng)的調(diào)整讀取與保存代碼。
import netCDF4 as nc
import pandas as pd
import numpy as np
def nc_to_csv(nc_file_path, csv_file_path):
"""
將NC文件轉(zhuǎn)換為CSV文件
參數(shù):
nc_file_path: NC文件路徑
csv_file_path: 輸出的CSV文件路徑
"""
try:
# 讀取NC文件
with nc.Dataset(nc_file_path, 'r') as nc_file:
# 提取變量數(shù)據(jù)
lat = nc_file.variables['lat'][:]
lon = nc_file.variables['lon'][:]
data = nc_file.variables['data'][:]
print(f"數(shù)據(jù)維度: lat={lat.shape}, lon={lon.shape}, data={data.shape}")
# 創(chuàng)建網(wǎng)格坐標(biāo)
lon_grid, lat_grid = np.meshgrid(lon, lat)
# 展平數(shù)據(jù)
df = pd.DataFrame({
'latitude': lat_grid.flatten(),
'longitude': lon_grid.flatten(),
'data_value': data.flatten()
})
# 保存為CSV
df.to_csv(csv_file_path, index=False)
print(f"文件已保存到: {csv_file_path}")
print(f"共 {len(df)} 行數(shù)據(jù)")
except Exception as e:
print(f"錯(cuò)誤: {e}")
# 使用示例
if __name__ == "__main__":
nc_to_csv('wspd_2024.nc', 'wspd_2024.csv')到此這篇關(guān)于Python解析nc格式的文件的文章就介紹到這了,更多相關(guān)Python解析nc格式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pymysql 插入數(shù)據(jù) 轉(zhuǎn)義處理方式
今天小編就為大家分享一篇pymysql 插入數(shù)據(jù) 轉(zhuǎn)義處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
如何使用Django Admin管理后臺(tái)導(dǎo)入CSV
這篇文章主要介紹了如何使用Django Admin管理后臺(tái)導(dǎo)入CSV,幫助大家更好的理解和使用django框架,感興趣的朋友可以了解下2020-11-11
Python Pytorch深度學(xué)習(xí)之核心小結(jié)
今天小編就為大家分享一篇關(guān)于Pytorch核心小結(jié)的文章,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-10-10

