利用python提取SWAT模型output.rch中固定sub编号的逐月径流到Excel
程序作用:SWAT模型输出output.rch文件中,按照指定的sub的每个月的径流到Excel。
只用修改if name == ‘main’: 中指出的部分即可。
具体代码如下:
# -*- coding: gbk -*-
import numpy as np
import os
import sys
import xlwt
import xlrd
#程序作用:输出output.rch文件中指定的sub的每个月的径流到Excel
def read(file,hru,star_year,end_year,excel_outpath):
#创建EXCEL
w = xlwt.Workbook(encoding = 'UTF-8')
sheet= w.add_sheet("sheet")
# sheet.write(0, 0, "LULC")
sheet.write(0, 1, "HRU")
sheet.write(0, 2, "GIS")
# sheet.write(0, 3, "SUB")
sheet.write(0, 3, "month")
sheet.write(0, 4, "FLOW_INcms")
sheet.write(0, 5, "FLOW_OUTcms")
hang=0
#遍历文件
for i in file:
f=open(i)
txt=f.readlines()
print (len(txt))
# print txt[0:10]
print("Executing",i)
for year in range(star_year, end_year+1):
for j in range(0,12): #指定月份:生长季的月份
data = txt[hru_sum*((year-star_year)*13+j)+hru+8] #8;头文件
hang = hang + 1
# sheet.write(hang, 0, data[0:4])
sheet.write(hang, 1, data[5:11]) #hru
sheet.write(hang, 2, data[11:20]) #gis
# sheet.write(hang, 3, data[20:25]) #mon
date=(txt[hru_sum*((year-star_year)*13+j)+hru+8][20:26]) #month
while len(date.strip())<2:
date="0"+date.strip()
sheet.write(hang, 3, str(year)+str(date).strip()) #year+month
sheet.write(hang, 4, float(data[38:50])) #FLOW_incms
sheet.write(hang, 5, float(data[50:62])) # FLOW_OUTcms
w.save(excel_outpath) #用户修改输出路径和文件名
def scearch(inp,type):
filepath1 = [] # 存储路径+数据列表
for dirpath1, dirname1, dirfile1 in os.walk(inp):
for file in dirfile1:
if file.endswith(type):
filepath1.append(os.path.join(dirpath1, file)) # 空列表添加路径数据
print("数据列表是:",filepath1)
return filepath1
def main(inp,hru,star_year,end_year,excel_outpath,type):
filepath=scearch(inp,type)
print("TXT查询完毕,开始读取")
read(filepath,hru,star_year,end_year,excel_outpath)
print("TXT写入EXCEL完毕,程序结束")
if __name__ == '__main__':
# 用户修改开始
inp=U"F:\毕业论文数据\ISIMIP3b\SWAT-ISIMIP3B-sim\\ukesm-SSP5" #用户修改.rch文件路径
outp=U"F:\毕业论文数据\ISIMIP3b\SWAT-ISIMIP3B-sim\\ukesm-SSP5" #用户修改输出文件路径
#在此改变子流域的编号
hru=285 #径流对应的子流域编号
star_year=2017 #必须是模拟开始的年份
end_year=2100 #实际模拟结束年份-需要提取截止的年份
hru_sum=425 #总共流域数
# 用户修改部分结束
type=".rch"
# row=1
# row=13 #月
excel_outpath=os.path.join(outp,'output.rch_hru_'+str(hru)+'_'+str(star_year)+'_'+str(end_year)+'.xls')
main(inp,hru,star_year,end_year,excel_outpath,type)