利用python提取SWAT模型output.rch中固定sub編號的逐月徑流到Excel
程序作用:SWAT模型輸出output.rch文件中,按照指定的sub的每個月的徑流到Excel。
只用修改if name == ‘main’: 中指出的部分即可。
具體代碼如下:
import numpy
as np
import os
import sys
import xlwt
import xlrd
def read(file,hru
,star_year
,end_year
,excel_outpath
):w
= xlwt
.Workbook
(encoding
= 'UTF-8')sheet
= w
.add_sheet
("sheet")sheet
.write
(0, 1, "HRU")sheet
.write
(0, 2, "GIS")sheet
.write
(0, 3, "month")sheet
.write
(0, 4, "FLOW_INcms")sheet
.write
(0, 5, "FLOW_OUTcms")hang
=0for i
in file:f
=open(i
)txt
=f
.readlines
()print (len(txt
))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] hang
= hang
+ 1sheet
.write
(hang
, 1, data
[5:11]) sheet
.write
(hang
, 2, data
[11:20]) date
=(txt
[hru_sum
*((year
-star_year
)*13+j
)+hru
+8][20:26]) while len(date
.strip
())<2:date
="0"+date
.strip
()sheet
.write
(hang
, 3, str(year
)+str(date
).strip
()) sheet
.write
(hang
, 4, float(data
[38:50])) sheet
.write
(hang
, 5, float(data
[50:62])) 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" outp
=U
"F:\畢業論文數據\ISIMIP3b\SWAT-ISIMIP3B-sim\\ukesm-SSP5" hru
=285 star_year
=2017 end_year
=2100 hru_sum
=425 type=".rch"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)
總結
以上是生活随笔為你收集整理的利用python提取SWAT模型output.rch中固定sub编号的逐月径流到Excel的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。