利用python提取SWAT模型output.rch中固定sub编号的逐月径流到Excel

利用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)
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值