今天终于把老板交代的事情忙完了,对于我这位计算机语言的小白来说,其中的艰辛不用说,一把辛酸泪啊!
在有计算机语言经验的老手而言,我这些问题似乎也不能算是问题,但我却卡了很久,对此,想把自己所遇到的困难
和解决方法都记录下来,避免以后犯同样的错误,慢慢进步吧,大神勿喷。
  首先老板让我去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. Spring的回滚问题

    再说下声明式事务和注解事务回滚的原理:当被切面切中或者是加了注解的方法中抛出了RuntimeException异常时,Spring会进行事务回滚.默认情况下是捕获到方法的RuntimeExceptio ...

  2. 45_redux_comment应用_redux版本_异步功能

    /* * 包含所有action的type名称常量 * */ //添加评论 export const ADD_COMMENT = 'add_comment'; //删除评论 export const D ...

  3. VUE框架的初识

    VUE框架的初识 初步了解Vue.js框架(渐进式前端框架) Vue.js是一种轻量级的前端MVVM框架.同时吸收了React(组件化)和Angular(灵活指令页面操作)的优点.是一套构建用户界面的 ...

  4. conda国内源的设置 by dwSun

    conda国内源的设置 by dwSun anaconda是一个balabalabala... 知道这个软件的人肯定不用介绍,不知道的也不必介绍. conda是anaconda的包管理器,通过cond ...

  5. 20175213《Java程序设计》实验二Java面向对象程序设计实验报告

    实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装,继承,多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 知识总结 1.伪代码 2.产品代码: ...

  6. Nagios监控

    1.Nagios监控软件 Nagios是一款开源的免费网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报警 ...

  7. Linux实操篇

    一:用户管理.群组管理 增: 1.指定群组添加账户: groupadd test 创建test用户组useradd -g test(用户组) xiaoming(用户名)       ---- 创建us ...

  8. Python学习—数据库篇之SQL补充

    一.SQL注入问题 在使用pymysql进行信息查询时,推荐使用传参的方式,禁止使用字符串拼接方式,因为字符串拼接往往会带来sql注入的问题 # -*- coding:utf-8 -*- # auth ...

  9. mysql 创建备份表

    mysql 中对已有表进行备份用到的语句 CREATE TABLE table_name_1  SELECT * FROM table_name_2; 这个语句是创建表1并且复制表2的结构和数据到表1 ...

  10. 2018-2019-20175302实验二《Java面向对象程序设计》实验报告

    2018-2019-2 学号实验二<Java面向对象程序设计>实验报告 一.实验步骤及内容 1. 面向对象程序设计 参考 http://www.cnblogs.com/rocedu/p/6 ...