爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 14365|回复: 5

[混合编程] [已收纳]IDL与python语法互译对照表

[复制链接]

新浪微博达人勋

发表于 2020-9-29 10:26:34 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 15195775117 于 2021-1-27 09:45 编辑

前2个月,为了把IDL写的功能做成PyQt的软件,我花了一周时间把一个项目的IDL代码翻译成python代码,总结了一些常用代码的互译。
IDL与python语法对比
IDL
python
检索文件夹file_search('C:\H_Scan\2020*P',/test_directory)from glob import glob
folds=glob(r'C:\H_Scan\2020*P')
检索文件file_search(path+'H_Scan\*2020*.txt')from glob import glob
files=glob(r'C:\H_Scan\2020*P.txt')
删除文件file_delete(file)os.remove(file)
文件是否存在file_test(fold+'grid_data.sav')os.path.isfile(path+r'\grid.dat')
或os.path.exists(file)
文件夹是否存在file_test(fold+'grid_data')os.path.isdir(path+r'\grid.dat')
函数查询?XXXXXX?或?XXX,对于函数f,f??会显示源码
多行并一行print,1&print,2&print,3print(1);print(2);print(3)
排序sort(返回值是索引)np.sort的返回值是元素,np.argsort的返回值才是索引
import numpy as np
x=[5,6,4,2,9]
x=np.array(x)
p=np.argsort(x)
print(p)#[3 2 0 1 4]
寻找p=where(x gt 1 and x lt 99 and x ne 49,count);返回索引p=np.where(x>10&x<20);print(x[p])返回索引
保存变量IDL保存数据和函数的二进制的文件是sav格式,写sav:
save,data,filename=fold+'data.sav'
加载sav:restore,'.\fold.sav'
与sav格式对应的是pickle;读:
f=open(fold+r'\data.dat','wb')
pickle.dump(data,f)
f.close()
写:f=open('data.dat','rb')
data=pickle.load(f)
f.close()
文本文件行数file_lines(file)读过才知道行数readlines
单精度浮点索引序列fltarr(5,8)x=np.arange(0.0,6.0)
x=x.reshape(2,3)
print(x)
# [[0 1 2]
#  [3 4 5]]
整型索引序列intarr(n)
求文件大小x=file_info(file);print(x.size);单位bit,除以1024才是单位kbos.path.getsize(file)
读格式化文本文件a=read_ascii(file,DELIMITER=';',data_start=6,header=head)
x=a.field1
输出运行时间文件首尾分别加tic和toc2次调取当前时间来实现datetime.now()
数组上下堆叠x=[[1,2],[3,4]]x=np.vstack(([1,2],[3,4]))
数组左右合并x=[a,b]x=np.hstack((a,b))
从完整路径获得文件名和目录file_basename(file),file_dirname(file)os.path.basename(file),os.path.dirname(file)
时间格式儒略日julday(12,31,2020,23,59,59);月日年时分秒;单位1代表1天datetime(2020,12,31,23,59,59);单位1代表1秒;起始时间不是儒略日
结构体/字典x={a:1,b:2,c:'xxx'}{'存在缺失的O3的8小时平均序列':x,'纬度':x,'值':x}
python的字典比IDL的结构体好用些,它的键是字符串形式,这是个好设计,等于用字符串代替变量名了,对于很难用英文实现“见名知意”的变量是福音
等值线图函数contourplt.contour只画等值线,plt.contourf才会填充
设置色条rgb_table=13cmap='rainbow'
时间轴格式xtickFORMAT='(C(CMOi,"月",CDI,"日",CHI,":00"))'x轴数据用datetime格式,轴会自动设置好
print不换行for i=0,10 do begin
  print,format='($,a)',strtrim(string(i),2)
endfor
输出:012345678910IDL>
print ('abc',end='')
字符串内换行print,'A'+string(10B)+'B'print('A\nB')
终止程序stopsys.exit(0)
函数中断
return
拆分字符串strsplit(somestring,’;’,/extract)somestring.split(’;’)
合并字符串strjoin(['A','B','C'],'-');结果A-B-C'-'.join([’A’,’B’,’C’])
求数组元素个数n_elements(x);IDL的一维数组叫向量len(x)的返回值是行数
求字符串字符个数strlen('123')len('abc')
求数组维度size(x);返回值的第一个是维度数x.ndim;x是numpy型
数字转字符串IDL把数字装字符串有些麻烦,会多出空格来,需要清除:
strtrim(string(999),2)
str(999)
精度问题IDL的浮点型时间必须用双精度time=dblarr(10),不然时间不准;经纬度同样;for循环用小数,最后一个循环可能失效,因为1.1可能会当做1.09999999...或1.1000001...
for i=0.01,1,0.01 do begin ...endfor
python的浮点型自动双精度
数组元素类型IDL的数组元素必须是同一类型[1,2,'a'];元素可以是不同类型





IDL与python语法对比.xls

27.5 KB, 下载次数: 9, 下载积分: 金钱 -5

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

新浪微博达人勋

发表于 2020-9-29 11:26:03 | 显示全部楼层
不错!感谢分享
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-9-29 14:39:56 | 显示全部楼层
VV09 发表于 2020-9-29 11:26
不错!感谢分享

{:lxm_9:}
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-9-30 08:46:00 | 显示全部楼层
棒!收藏收藏收藏
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-9-30 08:51:43 | 显示全部楼层
谢谢楼主,收藏
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-10-7 16:04:52 | 显示全部楼层

谢谢楼主,收藏
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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