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

    Mapreduce的运算过程为两个阶段: 第一个阶段的map task相互独立,完全并行: 第二个阶段的reduce task也是相互独立,但依赖于上一阶段所有map task并发实例的输出: 这些t ...

  2. 在Centos7上安装wxPython4.0.4

    在linux上安装wxPython4.0.4时需要gtk+2.0,在安装wxPython4.0.4遇到以下错误. linux上是用pip安装wxPython4.0.4的,执行命令如下: pip ins ...

  3. supervisord的安装使用

    由于生产环境使用的的tomcat,项目比较重要,所以要做进程守护,本来打算自己写脚本,但是效果不理想,想了下还是用supervisord了 由于很久不用,所以写下来部署步骤 第一:安装,安装的方法有y ...

  4. 吴裕雄 python matplotlib 绘图示例

    import matplotlib.pyplot as plt plt.scatter([1,2,3,4],[2,3,2,5])plt.title('My first plot')plt.show() ...

  5. KCF:High-Speed Tracking with Kernelized Correlation Filters 的翻译与分析(一)。分享与转发请注明出处-作者:行于此路

    High-Speed Tracking with Kernelized Correlation Filters 的翻译与分析 基于核相关滤波器的高速目标跟踪方法,简称KCF 写在前面,之所以对这篇文章 ...

  6. CancellationTokenSource 和 CancellationToken 取消线程

    Main 程序[分别调用三个方法] static void Main(string[] args) { using (CancellationTokenSource cts = new Cancell ...

  7. springboot+maven整合spring security

    springboot+maven整合spring security已经做了两次了,然而还是不太熟悉,这里针对后台简单记录一下需要做哪些事情,具体的步骤怎么操作网上都有,不再赘述.1.pom.xml中添 ...

  8. python 的xlwt模块

    一.安装 ♦ python官网下载https://pypi.python.org/pypi/xlwt模块安装. ♦或者在cmd窗口  pip install  xlrd 二.使用 1.导入模块 imp ...

  9. 解决修改css或js文件后,浏览器缓存未更新问题

    问题描述:最近在上线新版本项目的时候,发现有的用户的操作还是调用的老版本JS里面的内容,这样就造成原来新的JS里面加上的限制不能限制用户的操作,从而导致用户可以重复操作. 问题产生原因: 如果在用户之 ...

  10. 校赛F

    问题描述 例如对于数列[1 2 3 4 5 6],排序后变为[6 1 5 2 4 3].换句话说,对于一个有序递增的序列a1, a2, a3, ……, an,排序后为an, a1, an-1, a2, ...