爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 7801|回复: 6

[经验总结] PyNio 文件读取问题file format not supported or file is corrupted

[复制链接]

新浪微博达人勋

发表于 2019-4-19 01:00:46 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 mozhiting 于 2019-4-22 23:24 编辑

    ncl 转到python平台已经有一段时间了,从安装到读文件,真的是步步艰辛哪!摸索许久,也终于有了点心得,以前在这个平台得到许多帮助,现在作为第一批吃螃蟹的人(不是第一批也算比较早吧!),我也来贡献一下自己小小的力量吧!
1、就目前来说,PyNIOn ,PyNGL这两个包只能安装在linux系统下,与python能不能安装在windows下无关,即使是VS下的powershell即使有着类似linux的外壳,也是不可以滴。


2、对于windows系统来说,可以安装在Ubuntu子系统中(子系统怎么装的就不用我废话了吧),安装命令是:
conda create -n pyn_env -c conda-forge pynio pyngl
其中conda是一个包管理器,可以创建一个python的虚拟环境,然后将各个工具包打包进去,create就是创建(当你已经有了一个python虚拟环境,需要往里面安装的时候,只需把create换为install即可),-n也可以写成--name,意思是指明虚拟环境的名字,pyn_env就是我给这个虚拟环境起的名字,-c也可以写成--channel,是指从anaconda的各个通道里下载所需的包,conda-forge是anaconda下其中一个通道,pynio和pyngl是需要安装的包,同样你还可以在后面空格添加python,netcdf,scipy,xarray等可能用到的包,可以通过python=3的方式来指明安装的版本。注意:可以看到,conda命令的特点,-n 是--name的简写方法,其他如-c --channel -h --help亦是同理;另外,-n 是声明需要个名字,pyn_env是具体的名字,-c是声明从通道下载, conda-forge则是具体的通道,后面没有再加带-的声明,因此它就认为是需要安装的包了。


3、安装成功以后,可以通过conda env list来看一下虚拟环境的情况,如果你这是第一次用conda创建环境的话,应该只有两个,一个是base这个是一有conda就默认自带的,另外一个是新建的pyn_env(具体看你给它起什么名字了),如果你之前用conda装过ncl应该还会有一个类似于ncl_table的环境。


4、如果在list中有pyn_env这个环境了,就可以通过conda activate pyn_env(或source activate pyn_env,如果是windows系统就去掉source),来激活pyn_env这个环境(默认的环境是base),可以用conda deactivate env_name来退出当前环境。
进入某个环境后,你会看到在路径前面多了个(pyn_env)。


5、将包安装进某个环境,可以通过conda install -n pyn_env -c conda-forge netcdf4的方式,但是也可以先激活该环境,再用conda install netcdf4安装。


6、在某个环境下,使用conda list来查看该环境的包的列表,如果pynio和pyngl在列表中,说明安装成功了


7、输入python就可以进入python命令行模式(如果有多个python版本,可以通过python2来指明版本)


8、导入包,import Nio,Ngl


9、读取数据 f = Nio.open_file("Jsst.nc", "r")      
(Jsst.nc是我提前放在家目录下的文件,可以在没进入python之前通过ls命令来检查一下是否已在家目录下,文件是在这下的,因此绝对没问题http://www.ncl.ucar.edu/Applications/Data/)。
结果出现报错信息: file format not supported or file is corrupted
解决办法是用exit()退出python,然后输入chmod 777 Jsst.nc来修改文件的权限
再次进入python
import Nio
f = Nio.open_file("Jsst.nc", "r")
问题解决。

不要问我为什么文件损毁要去修改文件的权限,也不要问我是怎么发现的,(你要真想知道我也可以告诉你,当我尝试用netCDF4来读文件的时候,发现提示pemission denied,根据以往的经验可知,是文件权限问题,于是就用chmod 777修改了文件权限,进入python后发现netCDF4就可以正常读取这个文件了,于是我就想干嘛不再用Nio试一试呢,然后就成功了。由此可见ncl转到python的尿性,明明是权限问题,非得告诉我文件损毁了。)

预祝大家,在学习这个工具时,一切顺利!也欢迎大家前来交流~


密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-4-19 13:11:11 | 显示全部楼层
不错  不错
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-5-16 17:55:58 | 显示全部楼层
请问当变量是short类型时,如何用转成float呢?有没有NCL中short2flt这种函数
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-5-16 20:08:29 | 显示全部楼层
清宵逝水 发表于 2020-5-16 17:55
请问当变量是short类型时,如何用转成float呢?有没有NCL中short2flt这种函数

有的,http://www.ncl.ucar.edu/Document/Functions/list_alpha.shtml,可以在这个网页上查找。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-5-17 08:42:38 | 显示全部楼层
mozhiting 发表于 2020-5-16 20:08
有的,http://www.ncl.ucar.edu/Document/Functions/list_alpha.shtml,可以在这个网页上查找。

谢谢回复!short2flt这个函数好像只在NCL里可以用,在Nio和Ngl里没看到类似地函数。。我最后还是手动用offset和scale_factor转化的
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-5-17 09:25:13 | 显示全部楼层
清宵逝水 发表于 2020-5-17 08:42
谢谢回复!short2flt这个函数好像只在NCL里可以用,在Nio和Ngl里没看到类似地函数。。我最后还是手动用of ...

奥奥,我之前看错了,解决了就好,哈哈哈哈
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2024-4-13 20:03:44 | 显示全部楼层
你好,我在用cdo merge了nc文件后,发现用ncl读取这个新文件会出现file format not supported or file is corrupted这个问题,修改了文件权限也没用,但是ncl可以正常读取其他没有经过cdo处理的文件,想请教楼主知道是什么原因吗?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表