Python3.从csv文件解析MODIS数据的批量下载链接
从LAADS DAAC下载MODIS数据很痛苦,检索出的数据有好多页,要是有个批量下载的按钮就好了,但是这个网页上只有导出.csv或.json的选项,导出后还并不是直接的下载链接——这篇就是用Python的pandas来解决这个问题的。
代码如下:
# -*- coding: utf-8 -*-
"""
Created on Mon Jan 29 13:00:53 2018
要批量下载ladsweb.modaps.eosdis.nasa.gov上的数据前从cvs导出、合成下载链接
尝试PEP8风格
@author: 墨大宝
"""
import pandas as pd
def main(CSVPATH):
# 在cmd运行的Python中正常传入字符串,但是在Ipython控制台会多加一层单引号
if CSVPATH.startswith("'"):
CSVPATH = CSVPATH[1 : -1]
TXTPATH = CSVPATH[:-4] + '导出.txt'
# 第2列是下载链接的部分,第1、3列无关
links = pd.read_csv(CSVPATH, engine='python', usecols=[1],
header=None, skiprows=1)
# links = links.values.tolist()
# links= ['https://ladsweb.modaps.eosdis.nasa.gov' + y for x in links
# for y in x]
[links] = links.values.transpose().tolist() # 比上一种方法简洁
# 补全下载链接
links= ['https://ladsweb.modaps.eosdis.nasa.gov' + x for x in links]
with open(TXTPATH, 'w') as txtFile:
txtFile.write('\n'.join(links))
print('\n\n完成!\n导出的下载链接文件与.csv同路径')
if __name__ == '__main__':
print('\n**从cvs导出、合成ladsweb.modaps.eosdis.nasa.gov的下载链接**\n')
CSVPATH = input('请将从ladsweb.modaps.eosdis.nasa.gov上导出的.csv文件' +
'拖拉至此(或者输入其绝对路径):\n')
main(CSVPATH)
else:
raise ImportError('滚滚滚!')
不得不承认,整个程序的思路其实很简单,就是提取出.csv文件的中间一列,简单处理后写入文本而已。所以这篇知识性的东西不多——但还是有的:
- PEP8不建议在模块顶层赋值(小写的)变量,也不建议在函数中使用(大写的)常量,所以想严格按照PEP8的命名规范确实比较烦
- 将脚本主体处理到main函数中后,再用Spyder运行程序,主体中的变量将不在Variable explorer中显示——我早该想到的。所以再综合上一条,PEP8的部分推荐规范在科学计算领域可能不是很合理
- pd.read_csv()读成块的文本数据很方便,但是在这篇中优势不是很明显,不用pandas直接把.csv文件当作普通文本用.readlines()读完按照逗号分割估计也不算麻烦,那样还照顾到没装pandas的电脑——为啥这会儿才想起来啊啊啊——就当练习使用pd.read_csv()好了,这里面一些参数还是有说道的
- pd.read_csv()中engine=’python’功能更全,engine=’c’更快——文档中是这么说的,反正我碰到过好多次engine=’c’不好使必须用engine=’python’的情况了
第一个相对比较完整、规范的Python3程序,纪念一下