ENVI_IDL: 文本文件的读取(主要是txt、csv文件)

简介: ENVI_IDL: 文本文件的读取(主要是txt、csv文件)

1. 需要用到的函数

openr, 1, 路径——》1表示该路径下文件的内存地址的代称


变量 = file_lines(路径)——》传入文件所在的路径,返回该文件的行数


readf, 代称, 接收数据的变量——》第一个参数为文件的内存地址的代称, 第二个是接收数据的变量


skip_lun, 代称, 行数, /lines——》指定文件的代称, 指定需要跳过的行数, /lines表示前面跳过的是行


free_lun, 1代称——》指定文件的代称, 用于关闭文件的内存占用


2. 编程

pro week_six_study1
  ; 如何读取文本数据(主要是读取txt、csv后缀的文本文件)(txt是以空格分隔,csv是以半角逗号分隔)
  ; 路径
  file_path = 'D:/IDL_program/experiment_data/chapter_4/2013_year_aop.txt'
  ; 小白读取txt文件
  ; 打开该txt文件——》如果你只是读文件openr就可以了,openw既可以读也可以写(会覆盖原来的文件,慎用)
  openr, 1, file_path  ; 第一个1用来表示这个文件的内存地址,第二个是该文件的路径
  ; 由于第一行是索引,索引是文字,索引下面是数字, 两者类型不一致,不能放在一个数组里面存储,所以需要跳过
  skip_lun, 1, 1, /lines  ; 第一个1表示文件的编号或者说是内存地址的代称,第二个1表示需要跳过的行数,这里只跳过第一行,所以是1,第三个表示第二个参数的单位是行而不是列
  ; 创建存储的数组
  box_data = fltarr(5, 56304)  ; 通过记事本打开该文件事先查看到该文件的数据的行列数(共有5列56305行,但是第一行跳过所以只需要56304行)
  ; 获取文件的数据
  readf, 1, box_data
  ; 检验一下
  print, box_data[0, -1]  ; 发现一个新的玩意就是idl的取值也可以负值去取(和python一样,不详讲),这里等价于box_data[0, 56303]
  ; 关闭文件(养成好习惯)
  free_lun, 1
  ; 正常人读取txt文件
  ; 打开该txt文件
  openr, 1, file_path  ; 假如你上面没有free_lun,1那么这里是打不开的
  ; 拿到第一行的索引数据,这也是有用的(获取列数),跳过显得有些浪费
  ; 预先有一个str变量存储
  str = ''
  readf, 1, str  ; 这里你可能会疑惑,但是呢?readf是秉承着有多少给多少,现在str是一个字符串,默认输出一行,如果你是数组,那么根据数组的行列数有多少给多少
  ; 对得到的存储有第一行索引数据的str变量进行分析,通过该字符串分析出整个数据有多少列
  son_str_array = strsplit(str, /extract)  ; 不传入以什么作为分隔符,默认以空格作为该字符串的分隔符
  ; son_str_array里面有几个元素,那么整个数据就有几列
  column = n_elements(son_str_array)
  ; 现在获取行数
  row = file_lines(file_path) - 1  ; 第一行是索引,我们不放进下面的数组里面
  ; 创建存储的数组
  box_data = fltarr(column, row)
  ; 获取数据(这里得到的行数是从第二行的开头开始的,因为前面已经readf, 1, str了,所以文件指针已经指到了第二行开头处)
  readf, 1, box_data
  ; 检验一下
  print, box_data[0, -1]
  ; 关闭文件
  free_lun, 1
  ; 高手读取txt文件
  ; 打开文件
  openr, 1, file_path
  ; 跳过第一行
  skip_lun, 1, 1, /lines
  ; 读取文件的行数
  row = file_lines(file_path) - 1
  ; 创建存储的列表
  box_data = fltarr(5, row)  ; 这里的5是通过txt记事本打开看到的
  ; 获取txt文件数据
  readf, 1, box_data
  ; 检验一下
  print, box_data[0, -1]
  ; 关闭文件
  free_lun, 1
  ; 可能你会问,着有什么高级,我想说,高级不是什么东西都要编程去完成,高效才是最重要的
  ; 在这种文件里面,我们知道列数一般是不会变化的,所以直接用记事本打开看一下又何妨,但是行数由于每一个文件的行数都不一样
  ; 如果是一个文件那么还好,如果是很多文件,你都用记事本打开看一下吗,这是不现实,多了的我就不讲了。
  ; 读取csv文件
  ; 路径
  file_path = 'D:/IDL_program/experiment_data/chapter_4/air_quality_data.csv'
  ; 读取文件
  data = read_csv(file_path, header=par_name)  ; 第一行的索引给了数据给了par_name(但是无论你需不需要第一行索引数据,read_csv()函数默认都不会去读取第一行的数据)
  ; 查看data的类型
  help, data  ; 可以发现,这是一个结构体
  ; 输出第一列数据
  print, data.(0)
  ; 输出第一行的索引数据
  print, par_name
  ; 输出列索引是NO2的数据(第一种方法你可以自己去数它所在的列号按上面的方式进行读取并输出,也可以按下面这种方法)
  NO2_index = where(par_name eq 'NO2')
  print, data.(NO2_index)
end
目录
相关文章
|
网络安全 网络架构
ENSP-Kali环境联动
1.ENSP介绍 eNSP(Enterprise Network Simulation Platform)是一款由华为提供的免费的、可扩展的、图形化的网络设备仿真平台,主要对企业网路由器、交换机、WLAN等设备进行软件仿真,完美呈现真实设备部署实景,支持大型网络模拟,让你有机会在没有真实设备的情况下也能够开展实验测试,学习网络技术。
1824 0
ENSP-Kali环境联动
|
11月前
|
数据采集 数据可视化 数据挖掘
从CSV到交互式地图:用Plotly Express可视化地理数据
交互式地图让数据“活”起来:通过悬停、点击、缩放直观探索地理信息。结合Python的Pandas与Plotly Express,仅需几行代码即可实现散点图、热力图、线路图等可视化,支持自定义样式、动态筛选与多图层叠加,广泛应用于商业分析、环境监测、物流追踪等领域,零基础也能快速上手的空间数据分析利器。
595 1
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第26天】Prometheus与Grafana是智能运维中的强大组合,前者是开源的系统监控和警报工具,后者是数据可视化平台。Prometheus具备时间序列数据库、多维数据模型、PromQL查询语言等特性,而Grafana支持多数据源、丰富的可视化选项和告警功能。两者结合可实现实时监控、灵活告警和高度定制化的仪表板,广泛应用于服务器、应用和数据库的监控。
1917 4
|
机器学习/深度学习 数据采集 数据可视化
跟着penguins案例学Seaborn之Pairplot
跟着penguins案例学Seaborn之Pairplot
888 1
|
XML 存储 关系型数据库
10分钟手把手教你用Android手撸一个简易的个人记账App(一)
接下来就来讲解,如何从0到1实现一个简易的个人记账系统。
10分钟手把手教你用Android手撸一个简易的个人记账App(一)
|
存储
地理探测器Geodetector软件下载、操作方法与结果解释
本文介绍Geodetector软件的下载方法,以及地理探测器分析的完整操作,并对其结果加以解读~
3182 2
地理探测器Geodetector软件下载、操作方法与结果解释
|
机器学习/深度学习 监控 算法
傻傻分不清目标检测、语义分割和实例分割,看这篇就够了
傻傻分不清目标检测、语义分割和实例分割,看这篇就够了
5044 0
若依修改,路径{“msg“:“请求访问:/code/selectById/2,认证失败,无法访问系统资源“,“code“:401}
若依修改,路径{“msg“:“请求访问:/code/selectById/2,认证失败,无法访问系统资源“,“code“:401}
|
移动开发 JavaScript 程序员
程序员必知:vue播放video插件vue
程序员必知:vue播放video插件vue
1199 0
|
存储 数据可视化 C++
时间序列的季节性:3种模式及8种建模方法
分析和处理季节性是时间序列分析中的一个关键工作,在本文中我们将描述三种类型的季节性以及常见的8种建模方法。
1210 2