今天终于把老板交代的事情忙完了,对于我这位计算机语言的小白来说,其中的艰辛不用说,一把辛酸泪啊!
在有计算机语言经验的老手而言,我这些问题似乎也不能算是问题,但我却卡了很久,对此,想把自己所遇到的困难
和解决方法都记录下来,避免以后犯同样的错误,慢慢进步吧,大神勿喷。
  首先老板让我去calipso的官网上下数据集,我找的是这个人的文章,照葫芦画瓢,把账号申请下来,并且下载了数据集。
CALIPSO数据下载方法与可视化

  下好了数据集之后,就开始坑爹的读数据了。我用的是python语言,之前想过用IDL语言或者是MATLAB做,但是我对着两门

语言不是太熟悉,所以老板最后还是让我用python做,之前怕python会运转的速度慢,但事实速度还可以。750个文件,两千多万的数据

不到一个多小时就读完了。结果还算满意,废话不多说,下面说说怎么做的吧。

  我是想在网上找到了一篇文章,虽然不是读calipso的数据,但是读的是modis的数据,大致相同,程序类比一下就好了

python 读取 modis hdf文件

然后再结合老板要我读出的那一串数据就可以类比出我自己的代码了(注意,这里还算简单,但是输出的结果却是很蛋疼!!)

import os

from pyhdf.SD import SD, SDC
import pprint
import numpy as np
np.set_printoptions(threshold=np.NaN)
dir_list=os.listdir(r'D:\clouddata')
# print(len(dir_list))
for j in dir_list[0:int(len(dir_list)):2]: #为了去hdf的文件名 HDF_FILR_URL = "D:\clouddata\\"+j #将其拼接成地址
# print(HDF_FILR_URL)
file = SD(HDF_FILR_URL) # print(file.info())
datasets_dic = file.datasets() # for idx, sds in enumerate(datasets_dic.keys()):
# print(idx, sds)
sds_obj_profile_time = file.select('Profile_Time')
sds_obj_feature_classification_flags = file.select('Feature_Classification_Flags')
sds_obj_longitude = file.select('Longitude')# select sds
sds_obj_latitude = file.select('Latitude')
sds_obj_layer_top_altitude = file.select('Layer_Top_Altitude')
sds_obj_layer_base_altitude = file.select('Layer_Base_Altitude')
sds_obj_layer_top_pressure = file.select('Layer_Top_Pressure')
sds_obj_layer_base_pressure = file.select('Layer_Base_Pressure')
sds_obj_layer_top_temperature = file.select('Layer_Top_Temperature')
sds_obj_layer_base_temperature = file.select('Layer_Base_Temperature') data_profile_time = str(sds_obj_profile_time.get()) # get sds data
data_feature_classification_flags = str(sds_obj_feature_classification_flags.get())
data_longitude = str(sds_obj_longitude.get())
data_latitude = str(sds_obj_latitude.get())
data_layer_top_altitude = str(sds_obj_layer_top_altitude.get())
data_layer_base_altitude = str(sds_obj_layer_base_altitude.get())
data_layer_top_pressure = str(sds_obj_layer_top_pressure.get())
data_layer_base_pressure = str(sds_obj_layer_base_pressure.get())
data_layer_top_temperature = str(sds_obj_layer_top_temperature.get())
data_layer_base_temperature = str(sds_obj_layer_base_temperature.get())
filename = 'clouddata_base.txt'
with open(filename, 'w') as f: a=len(sds_obj_profile_time.get())
strs='data_profile_time'+" "+"data_feature_classification_flags"+" "+"data_longitude"+" "+"data_latitude"+" "+"data_layer_top_altitude"+" "+"data_layer_base_altitude"+" "+"data_layer_top_pressure"+" "+"data_layer_base_pressure"+" "+"data_layer_top_temperature"+" "+"data_layer_base_temperature"+"\n"
for i in range(0,2):
strs+=str(sds_obj_profile_time.get()[i])+" "+str(sds_obj_feature_classification_flags.get()[i])+" "+str(sds_obj_longitude.get()[i])+" "+str(sds_obj_latitude.get()[i])+" "+str(sds_obj_layer_top_altitude.get()[i])+" "+str(sds_obj_layer_base_altitude.get()[i])+" "+str(sds_obj_layer_top_pressure.get()[i])+" "+str(sds_obj_layer_base_pressure.get()[i])+" "+str(sds_obj_layer_top_temperature.get()[i])+" "+str(sds_obj_layer_base_temperature.get()[i])+'\n' f.write(strs)

这里要掌握的知识点有:os.listdir      select方法      get方法,多用在字典中。注意要想写到txt文本里,必须要是字符串类型。

然后输出的数据并不是我想要的,我想要的是一类数据都输出到一行上面,但是输出的数据像鬼使神差似的,总会在莫名其妙的地方

断行,我一开始以为是记事本一行有字符限制,确实有,每一行最多可以输出1024个字符,但是我的一行数据根本没达到1024个,我用了

我所会的各种方法,读出来的数据都是一样的。然后我就在想是不是数据库本身的原因。

如图所示,我的代码根本没有错,但就是得不到想要的结果,但是我后来发现他读出的数据虽然是中括号,但并不是列表,

而是数组,这就很关键了,虽然它自动换行了,但是我可以对数组里面的元素进行遍历,将其输入到一行就可以啦。

真正运行的代码如下:(对于初学者的我来说,里面有很多重复代码,比较low,等我看完函数部分,再进行改进,先把程序

跑通,后续在进行代码优化。)

# -*- coding: utf-8 -*-
import os from pyhdf.SD import SD, SDC
import pprint
import numpy as np
np.set_printoptions(threshold=np.NaN) #这一行和上一行的目的是在读出数据很多事,不会有省略号,数据全部可见
dir_list=os.listdir(r'D:\clouddata')
# print(len(dir_list)) #输出文件的个数,1495
for v in dir_list[0:int(len(dir_list)):2]: text_name = v[0:-4] #v遍历的是我下载的文件名,取到倒数第5位,是为了去掉.hdf,为了下面的写入文件的命名
filename = "D:\\pydata\\" + text_name + ".txt" #有多少个文件,就可以生成多少TXT,并且命名,这个套路要学着。 HDF_FILR_URL = "D:\clouddata\\"+v #拼成一个地址,这样才能读数据
# print(HDF_FILR_URL)
file = SD(HDF_FILR_URL) # print(file.info())
datasets_dic = file.datasets() # for idx, sds in enumerate(datasets_dic.keys()):
# print(idx, sds)
sds_obj_profile_time = file.select('Profile_Time')
# print(type(file.select('Profile_Time')))
sds_obj_feature_classification_flags = file.select('Feature_Classification_Flags')
sds_obj_longitude = file.select('Longitude')# select sds
sds_obj_latitude = file.select('Latitude')
sds_obj_layer_top_altitude = file.select('Layer_Top_Altitude')
sds_obj_layer_base_altitude = file.select('Layer_Base_Altitude')
sds_obj_layer_top_pressure = file.select('Layer_Top_Pressure')
sds_obj_layer_base_pressure = file.select('Layer_Base_Pressure')
sds_obj_layer_top_temperature = file.select('Layer_Top_Temperature')
sds_obj_layer_base_temperature = file.select('Layer_Base_Temperature') data_profile_time = sds_obj_profile_time.get() # get sds data
data_longitude = sds_obj_longitude.get()
data_latitude = sds_obj_latitude.get()
data_layer_top_altitude = sds_obj_layer_top_altitude.get()
data_layer_base_altitude = sds_obj_layer_base_altitude.get()
data_layer_top_pressure = sds_obj_layer_top_pressure.get()
data_layer_base_pressure = sds_obj_layer_base_pressure.get()
data_layer_top_temperature = sds_obj_layer_top_temperature.get()
data_layer_base_temperature = sds_obj_layer_base_temperature.get()
data_feature_classification_flags = sds_obj_feature_classification_flags.get() with open(filename, 'a') as f:
a=len(data_profile_time)
for i in range(0,a):
var2 = ''
var1 = data_layer_top_altitude[i]
for j in range(0, len(data_layer_top_altitude[0])):
# print(type(var1[j]))
# print(data_layer_top_altitude[i])
var2 += str(var1[j])
var2 += ' ' #这个步骤就是将数组内部的元素进行遍历,然后再在一行输出 if var2=="-9999.0 -9999.0 -9999.0 -9999.0 -9999.0 -9999.0 -9999.0 -9999.0 -9999.0 -9999.0 ":
var2="" #这是为了筛掉无效数据,因为-9999.0是无效数据,只能占用内存,没有别的作用 var4 = ''
var3 = data_layer_base_altitude[i]
for j in range(0, len(data_layer_base_altitude[0])):
var4 += str(var3[j])
var4 += ' '
var6 = ''
var5 = data_layer_top_pressure[i]
for j in range(0, len(data_layer_top_pressure[0])):
var6 += str(var5[j])
var6 += ' '
var8 = ''
var7 = data_layer_base_pressure[i]
for j in range(0, len(data_layer_base_pressure[0])):
var8 += str(var7[j])
var8 += ' '
var10 = ''
var9 = data_layer_top_temperature[i]
for j in range(0, len(data_layer_top_temperature[0])):
var10 += str(var9[j])
var10 += ' '
var12 = ''
var11 = data_layer_base_temperature[i]
for j in range(0, len(data_layer_base_pressure[0])):
var12 += str(var11[j])
var12 += ' '
var14 = ''
var13 = data_feature_classification_flags[i]
for j in range(0, len(data_feature_classification_flags[0])):
var14 += str(var13[j])
var14 += ' '
var16 = ''
var15 = data_profile_time[i]
for j in range(0, len(data_profile_time[0])):
var16 += str(var15[j])
var16 += ' '
var18 = ''
var17 = data_longitude[i]
for j in range(0, len(data_longitude[0])):
var18 += str(var17[j])
var18 += ' '
var20 = ''
var19 = data_latitude[i]
for j in range(0, len(data_latitude[0])):
var20 += str(var19[j])
var20 += ' '
strs = var16 + " " + var18 + " " + var20 + " " + var2 + " " + var4 + " " + var6 + " " + var8 + " " + var10 + " " + var12 + " " + var14 + "\n"
if var2=="":
strs=""
# strs=var16+" "+var18+" "+var20+" "+var2+" "+var4+" "+var6+" "+var8+" "+var10+" "+var12+" "+var14+"\n"
f.write(strs)
strs=''

这里我学到的一些东西,比如说,1、如何遍历数组的元素啊,以后列表字典的都是可以套用的。

               2、如何用循环创建多个文件

               3、numpy的基本运用

慢慢学习,慢慢积累,争取每天都有进步!


关于下载calipso数据集以及用python将其读到记事本小结的更多相关文章

  1. 人工智能大数据,公开的海量数据集下载,ImageNet数据集下载,数据挖掘机器学习数据集下载

    人工智能大数据,公开的海量数据集下载,ImageNet数据集下载,数据挖掘机器学习数据集下载 ImageNet挑战赛中超越人类的计算机视觉系统微软亚洲研究院视觉计算组基于深度卷积神经网络(CNN)的计 ...

  2. scikit-learn使用fetch_mldata无法下载MNIST数据集的问题

    scikit-learn使用fetch_mldata无法下载MNIST数据集的问题 0. 写在前面 参考书 <Python数据科学手册> 工具 python3.5.1,Jupyter La ...

  3. 下载8000首儿歌的python代码

    下载8000首儿歌的python的代码: #-*- coding: UTF-8 -*- from pyquery import PyQuery as py from lxml import etree ...

  4. 下载kaggle数据集,验证手机号

    https://blog.csdn.net/Tomxiaodai/article/details/80167765 kaggle上下载一下数据集必须手机验证,结果验证时一直提示错误输入的格式错误,试了 ...

  5. Keras下载的数据集以及预训练模型保存在哪里

    Keras下载的数据集在以下目录中: root\\.keras\datasets Keras下载的预训练模型在以下目录中: root\\.keras\models 在win10系统来说,用户主目录是: ...

  6. 下载kaggle数据集的小妙招

    kaggle是很多数据分析和机器学习初学者非常喜爱的数据科学竞赛平台. 这个平台上有很多接近现实业务场景的数据集,非常适合练手. 今天向大家推荐一个下载kaggle数据集的小工具--kaggleAPI ...

  7. Python小实验——读&写Excel文件内容

    安装xlrd模块和xlwt模块 读取Excel文件了内容需要额外的模块-- \(xlrd\),在官网上可以找到下载:https://pypi.python.org/pypi/xlrd#download ...

  8. Python生成随机数组的方法小结

    Python生成随机数组的方法小结 本文实例讲述了Python生成随机数组的方法.分享给大家供大家参考,具体如下: 研究排序问题的时候常常需要生成随机数组来验证自己排序算法的正确性和性能,今天把Pyt ...

  9. Python学习day26-面向对象之小结

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

随机推荐

  1. Java面试题 BAT 大公司面试题整理总结!

    本文只列出了问题,答案还是需要需要自己的总结,很多时候自己总结出来的语言在面试时比硬背的效果好很多. 这些题目是网友去百度.小米.乐视.美团.58.猎豹.360.新浪.搜狐等一线互联网公司面试被问到的 ...

  2. 使用css设置三角形

    1.在开发中,有时候会用到一些小三角形来强调或者标记元素,这样以便区分不同的项目,然后把三角形绘制成一个比较明显的颜色,就达到效果了,那怎么才能画出三角形呢,之前我也不清楚,最近看到了有些网页在使用, ...

  3. Linux 下安装 apache

    1.检查是否已经安装过 apache (linux 中 apache 的名字是 httpd) rpm -qa  httpd 2.如果没有安装过,运行如下命令 yum install httpd -y ...

  4. WordCount编码实现及单元测试(第二次作业)

    项目码云地址:https://gitee.com/zhujunlin/wc.git 一.题目思路 ========== 阅读完题目要求之后我很懵,因为之前从未使用过博客园和码云工具,对编程的目标需求也 ...

  5. Java8自定义函数式编程接口和便捷的引用类的构造器及方法

    什么是函数编程接口? 约束:抽象方法有且只有一个,即不能有多个抽象方法,在接口中覆写Object类中的public方法(如equal),不算是函数式接口的方法. 被@FunctionalInterfa ...

  6. Java框架spring Boot学习笔记(八):@PropertySource,@Value注解

    获取配置文件 忽略配置文件不存在时报错

  7. 解题(GoUpstairs -- 上楼梯)

    题目描述 有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶.2阶.3阶.请实现一个方法,计算小孩有多少种上楼的方式.为了防止溢出,请将结果Mod 1000000007 给定一个正整数int n, ...

  8. 【笔记】Python基础一 :变量,控制结构,运算符及数据类型之数字,字符串,列表,元组,字典

    一,开发语言介绍 高级语言:Java,C#,Python  ==>产生字节码 低级语言:C,汇编                   ==>产生机器码 高级语言开发效率高,低级语言运行效率 ...

  9. Shiro 整合 SpringBoot

    https://blog.csdn.net/weixin_38132621/article/details/80216056

  10. 《CSAPP》读书笔记

    第一章 第二章 第三章 第四章 第五章 第六章 第七章 链接 可重定位目标文件 符号和符号表 符号解析 第八章 第九章 虚拟存储器 虚拟存储器 页表.页命中.缺页 地址翻译 第十章 第十一章 第十二章 ...