关于下载calipso数据集以及用python将其读到记事本小结
今天终于把老板交代的事情忙完了,对于我这位计算机语言的小白来说,其中的艰辛不用说,一把辛酸泪啊!
在有计算机语言经验的老手而言,我这些问题似乎也不能算是问题,但我却卡了很久,对此,想把自己所遇到的困难
和解决方法都记录下来,避免以后犯同样的错误,慢慢进步吧,大神勿喷。
首先老板让我去calipso的官网上下数据集,我找的是这个人的文章,照葫芦画瓢,把账号申请下来,并且下载了数据集。
CALIPSO数据下载方法与可视化
下好了数据集之后,就开始坑爹的读数据了。我用的是python语言,之前想过用IDL语言或者是MATLAB做,但是我对着两门
语言不是太熟悉,所以老板最后还是让我用python做,之前怕python会运转的速度慢,但事实速度还可以。750个文件,两千多万的数据
不到一个多小时就读完了。结果还算满意,废话不多说,下面说说怎么做的吧。
我是想在网上找到了一篇文章,虽然不是读calipso的数据,但是读的是modis的数据,大致相同,程序类比一下就好了
然后再结合老板要我读出的那一串数据就可以类比出我自己的代码了(注意,这里还算简单,但是输出的结果却是很蛋疼!!)
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=''
关于下载calipso数据集以及用python将其读到记事本小结的更多相关文章
- 人工智能大数据,公开的海量数据集下载,ImageNet数据集下载,数据挖掘机器学习数据集下载
人工智能大数据,公开的海量数据集下载,ImageNet数据集下载,数据挖掘机器学习数据集下载 ImageNet挑战赛中超越人类的计算机视觉系统微软亚洲研究院视觉计算组基于深度卷积神经网络(CNN)的计 ...
- scikit-learn使用fetch_mldata无法下载MNIST数据集的问题
scikit-learn使用fetch_mldata无法下载MNIST数据集的问题 0. 写在前面 参考书 <Python数据科学手册> 工具 python3.5.1,Jupyter La ...
- 下载8000首儿歌的python代码
下载8000首儿歌的python的代码: #-*- coding: UTF-8 -*- from pyquery import PyQuery as py from lxml import etree ...
- 下载kaggle数据集,验证手机号
https://blog.csdn.net/Tomxiaodai/article/details/80167765 kaggle上下载一下数据集必须手机验证,结果验证时一直提示错误输入的格式错误,试了 ...
- Keras下载的数据集以及预训练模型保存在哪里
Keras下载的数据集在以下目录中: root\\.keras\datasets Keras下载的预训练模型在以下目录中: root\\.keras\models 在win10系统来说,用户主目录是: ...
- 下载kaggle数据集的小妙招
kaggle是很多数据分析和机器学习初学者非常喜爱的数据科学竞赛平台. 这个平台上有很多接近现实业务场景的数据集,非常适合练手. 今天向大家推荐一个下载kaggle数据集的小工具--kaggleAPI ...
- Python小实验——读&写Excel文件内容
安装xlrd模块和xlwt模块 读取Excel文件了内容需要额外的模块-- \(xlrd\),在官网上可以找到下载:https://pypi.python.org/pypi/xlrd#download ...
- Python生成随机数组的方法小结
Python生成随机数组的方法小结 本文实例讲述了Python生成随机数组的方法.分享给大家供大家参考,具体如下: 研究排序问题的时候常常需要生成随机数组来验证自己排序算法的正确性和性能,今天把Pyt ...
- Python学习day26-面向对象之小结
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
随机推荐
- Visual Studio 2017 密匙
趁着这两天微软发布了Visual Studio 2017,安装体验了这个史上最强IDE最新版,分享一下自己的安装过程: VS2017下载地址,该版本堪称史上最大IDE,随便勾了几个选项,就要占用几十个 ...
- wdcp lanmp 安装+搭建网站+安全狗安装 详细实用
先说一下WDCP,其实就是一个集成环境,优点是有后台可视化面板操作,不像一般的linux似的 都要用代码命令! Linux 的PHP 环境一般就是两个搭配 [mysql+Apache+PHP]和[My ...
- 【译】BERT表示的可解释性分析
目录 从词袋模型到BERT 分析BERT表示 不考虑上下文的方法 考虑语境的方法 结论 本文翻译自Are BERT Features InterBERTible? 从词袋模型到BERT Mikol ...
- 小A的位运算-(前缀和+位运算)
https://ac.nowcoder.com/acm/contest/549/D 题意:从N个数里面选出N-1个数要让它们或起来的值最大. 解题: 假设n个数分别存在a数组里. 从左到右连续或运算结 ...
- loading data into a table(亲测有效)
一.实验要求 导入数据到数据库的表里 表内容如下: name owner species sex birth death Fluffy Harold cat f 1993-02-04 Cla ...
- 云笔记项目- 上传文件报错"java.lang.IllegalStateException: File has been moved - cannot be read again"
在做文件上传时,当写入上传的文件到文件时,会报错“java.lang.IllegalStateException: File has been moved - cannot be read again ...
- heat-engine组件
1.heat-engine启动一个rpc server端,EngineService在初始化时加载heat.clients插件和初始化env, env中包括各种资源关键字对应的映射类和constrai ...
- Win10系统总是提示"在商店中查找应用"的关闭方法
Win10系统总是提示"在商店中查找应用"该怎么关闭?win10中打开文件的时候总是提示在商店中查找应用,但是自己的电脑中有程序可以打开这个文件,不需要去商店中下载,该怎么取消这个 ...
- 给统计人讲python(1)模拟城市_数据分析
为让学校统计学社的同学了解python在数据处理方面的功能,将手游模拟城市的工厂生产进行建模,让同学在建模与处理非结构数据的过程中学习和了解python.将准备的内容放在此让更多需要的人特别是统计人( ...
- 2019 年 React 学习路线图(转)
转自:https://www.infoq.cn/article/AEkiVAiJf25LZmoUe_yc 之前我们已经介绍了2019 年 Vue 学习路线图,而 React 作为当前应用最广泛的前端框 ...