做网站有包括哪些东西/整站优化加盟
许多操作需要选择很多文件,但经典版的ENVI中可以以文件路径的形式导入
使用Python脚本生成文件路径
文章目录
- 列出指定文件夹下指定类型的文件
- 文件夹重命名
- 自动下载哨兵的精轨数据
- 哨兵数据导入-生成导入参数
- 生成裁剪参数
列出指定文件夹下指定类型的文件
# -*- coding:utf-8 -*-
# 列出指定文件夹下指定类型的文件
import ospath = r'J:\sentinel404075-process\1_import'for parent,dirnames,filenames in os.walk(path):for file in filenames:if file.endswith("SIW1_A_VV_slc_list"):print os.path.join(parent,file)
文件夹重命名
# -*- coding:utf-8 -*-
# 重命名 将文件夹中的空格修改为_
import ospath = r'J:\sentinel-process-40_40_75\1_import'for parent,dirnames,filenames in os.walk(path):for dirname in dirnames:if dirname=="1 Import":whole_path = os.path.join(parent,dirname)new_name = os.path.join(parent,"1_import")os.rename(whole_path,new_name)
自动下载哨兵的精轨数据
# -*- coding:utf-8 -*-
# Author:PasserQi
# Time:2019-4-5
# 下载文件夹下哨兵数据的精轨数据
# 须知:文件夹下的哨兵数据需解压。不想解压可以修改程序的第43行,.SAFE该为.zip
import urllib
from bs4 import BeautifulSoup
import re
import os
import datetime
import time# 需要修改的参数
dir_path = r'G:\Sentinel-original data\Orbit40-path40\Frame75-11\added_20180105\SourceData' # 哨兵数据存在的目录
out_path = r'C:\Users\PasserQi\Desktop' #精轨数据保存的目录
FILE_TYPE = ".SAFE" #文件格式:.SAFE .zip
IsDownload = True #是否下载:True Falsedownload_urls = []
error_url = []
url_prefix = 'https://qc.sentinel1.eo.esa.int/aux_poeorb/' #下载地址
def download(dest_dir, url):print "正在下载:{}\n\t至{}\n".format(url, dest_dir)try:urllib.urlretrieve(url, dest_dir, callbackfunc)except:error_url.append(url)print '\tError retrieving the URL:', dest_direlse: # 没有异常print "\t[done]"if url in error_url: #在错误列表里error_url.remove(url)
def callbackfunc(blocknum, blocksize, totalsize):'''回调函数@blocknum: 已经下载的数据块@blocksize: 数据块的大小@totalsize: 远程文件的大小'''percent = 100.0 * blocknum * blocksize / totalsizeif percent > 100:percent = 100print "%.2f%%"% percentdef get_yestoday(mytime):myday = datetime.datetime( int(mytime[0:4]),int(mytime[4:6]),int(mytime[6:8]) )delta = datetime.timedelta(days=-1)my_yestoday = myday + deltamy_yes_time = my_yestoday.strftime('%Y%m%d')return my_yes_timeif __name__ == '__main__':# 获得filesfiles = os.listdir(dir_path)#files = [# "S1A_IW_SLC__1SDV_20180201T101712_20180201T101742_020412_022E1C_43FD.SAFE",# "S1A_IW_SLC__1SDV_20180213T101712_20180213T101742_020587_0233BB_CA75.SAFE",# "S1A_IW_SLC__1SDV_20180309T101712_20180309T101742_020937_023ED6_693E.SAFE",# ]for file in files:if not file.endswith(FILE_TYPE):continue# ############################ 按文件名上的信息查找EOF# 拼接URLurl_param_json = {}url_param_json['sentinel1__mission'] = file[0:3]date = re.findall(r"\d{8}",file)[0]# 若参数为20170316,则搜索的是20170317的数据# 所以参数应该提前一天# 求date的前一天date = get_yestoday(date)# 在字符串指定位置插入指定字符# 例:20170101 --> 2017-01-01tmp = list(date)tmp.insert(4,'-');tmp.insert(7,'-')date = "".join(tmp)url_param_json['validity_start'] = date# 获得EOF下载网址url_param = urllib.urlencode(url_param_json) #url参数url = 'https://qc.sentinel1.eo.esa.int/aux_poeorb/?%s' % url_param #拼接print "url:{}".format(url)html = urllib.urlopen(url) # 获取htmldom = BeautifulSoup(html) # 解析html文档a_list = dom.findAll("a") # 找出<a>eof_lists = [a['href'] for a in a_list if a['href'].endswith('.EOF')] # 找出EOFfor eof in eof_lists:if IsDownload:eof_name = eof.split('/')[-1] #名字savefile = os.path.join(out_path, eof_name) #保存路径download(savefile, eof)else:download_urls.append(eof)if IsDownload: #下载print "------------------------------------"print "开始下载出错的数据"# 下载出错的数据重新下载while len(error_url)!=0:print "出错的数据有"print error_urlfor eof in error_url:savefile = os.path.join(out_path, eof)download(savefile, url_prefix + eof)print "全部下载成功,无出错文件"else: #不下载with open(os.path.join(out_path, u"下载链接.txt"), "w+") as f:for eof in download_urls:f.write(eof)f.write("\n")f.close()
哨兵数据导入-生成导入参数
# -*- coding:utf-8 -*-
# Author:PasserQi
# Python:2.7
# Time:
# 2018-01-13 v1 创建 生成哨兵数据导入参数
# 2019-04-04 v1.1 修改
import re
import os
import datetime
import json# 需要修改的参数
safe_path = r'G:\xiamen_20190403\1safe' #哨兵数据存在的目录
eof_path = r'G:\xiamen_20190403\1eof' #精轨数据存在的目录
out_path = r'G:\xiamen_20190403\2import' #输出文件夹
again_generate = False# False:第一次导入# True: 二次导入--从ERRORS中导入def get_yestoday(mytime):myday = datetime.datetime( int(mytime[0:4]),int(mytime[4:6]),int(mytime[6:8]) )delta = datetime.timedelta(days=-1)my_yestoday = myday + deltamy_yes_time = my_yestoday.strftime('%Y%m%d')return my_yes_timedef save_json(dir, fn, obj):""" 将Python对象保存成JSON文件:param dir::param fn::param obj::return:"""import osfp = os.path.join(dir, fn + '.json')if os.path.exists(fp): #原来有,删掉os.remove(fp)with open(fp, 'w+') as f:json.dump(obj, f, indent=4)f.close()return fpeof_datas = []
datas = []
def gen_params(again_generate):safe_datas = []if again_generate: #从ERRORS导入with open(os.path.join(out_path, "errors.json"), "r") as f:safe_datas = json.load(f)else: #第一次导入# 得到safe文件files = os.listdir(safe_path)for file in files:if file.endswith(".SAFE"):safe_datas.append(file)out_str = ""# 得到eof文件files = os.listdir(eof_path)for file in files:if file.endswith(".eof") or file.endswith(".EOF"):eof_datas.append(file)cnt = 0errors = []for safe_data in safe_datas:# 获得数据日期date = re.findall(r"\d{8}", safe_data)[0]# 获得前一天的日期yestoday_date = get_yestoday(date)# 找到对应的eof文件isFound = Falsefor eof_data in eof_datas:if yestoday_date in eof_data:datas.append({"date": date,"safe_data": os.path.join(safe_path, safe_data),"eof_data": os.path.join(eof_path, eof_data),"out_path": os.path.join(out_path, date)})eof_datas.remove(eof_data)isFound = Truebreakif isFound == False: # 没有EOF文件errors.append(safe_data)out_str += "\n--------Input file list(哨兵数据列表)--------\n"for data in datas:out_str += "%s\\manifest.safe\n" % data["safe_data"]out_str += "\n--------Orbit list(EOF数据列表)--------\n"for data in datas:out_str += data["eof_data"] + "\n"out_str += "\n--------Output file list(输出列表)--------\n"for data in datas:out_str += "%s\\sentinel1\n" % data["out_path"]out_str += "\n--------没有找到以下数据的EOF--------\n"out_str += "[\n"for error in errors:out_str += '"{}",\n'.format(error)out_str += "]\n"if again_generate:fp = os.path.join(out_path, 'import_params2.txt')else:fp = os.path.join(out_path, "import_params1.txt")with open(fp, "w+") as f:f.write(out_str)f.close()print "[done] 请查看文件:{}".format(fp)# 保存ERRORS数据save_json(out_path, "errors", errors)if __name__ == '__main__':gen_params(again_generate)
生成裁剪参数
# -*- coding:utf-8 -*-
# 生成裁剪参数
import ospath = r'J:\ningbo\1_import'
out_path = r""
FILE_NAME_END = "VV_slc_list"files = []
out_files = []
i = 0
for parent,dirnames,filenames in os.walk(path):for file in filenames:if file.endswith(FILE_NAME_END):i += 1# intputfp = os.path.join(parent, file)files.append(fp)# outputdate_str = fp.split("\\")[-2]out_fp = os.path.join(out_path, date_str)out_fp = os.path.join(out_fp, file + "_cut")out_files.append(out_fp)with open(os.path.join(out_path, "sub_params_list.txt"), "w+") as fp:fp.write("\n---------input list---------\n")for file in files:fp.write("{}\n".format(file) )fp.write("\n---------output list---------\n")for file in out_files:fp.write("{}\n".format(file))fp.close()print "[done] {}个文件".format(i)
