txt代码文件怎么转换_python水文mike模型输入数据excel转txt文件python实现代码

欢迎大家和我留言或邮箱联系讨论呀~

mike模型是水文分析的重要模型,但是输入数据需要以固定txt格式输入。

网上的代码都是要不然写的不清楚用不了,要不然让联系有偿使用代码。

所以自己花了点时间写了一下。代码里面注释部分已经写的比较清楚啦,如果有同学使用时候报错可以邮箱或者微信联系我(免费的哈),欢迎大家联系,互相学习互相进步。

来先看一下效果:

bb0ca3759a5335c895cb7a49593bf07f.png

99743dc30ffe04c5f7abf9dea28593ca.png

代码如下:

#----------------------------------------
#名称:mike11模型excel数据自动处理成txt格式
#分类:Python 脚本
#联系人:沙特
#Email: shate1018@126.com
#wechat:yigubigu_y
#----------------------------------------


import xlrd
import xlwt
import pandas as pd



# -------------------------参数设置---------------------------------
title_start = 2    # 头起始行数-1
title_num = 38     # 头终止行数
end_num = -1       # 每个section结束的位置。-1为初值
profile = 0        # 每个section_id中的数据行数
MIN = 6666.66      # 最小_初值


# -------------------------创建打开txt--------------------------------
txt_path = "mike11.txt"
excel_path = "然则日阿错整理文件(3).xlsx"
f = open(txt_path, 'a')
workbook = xlrd.open_workbook(excel_path)
sheet = workbook.sheet_by_name("Sheet1")

''' 
注意:
    title_start,title_num两个需要手动赋值
    txt_path:
            需要赋路径,默认路径在脚本文件中的同名txt文件,并以追加形式写入
            如果不存在则自动创建
            需要处理文件多的话建议手动创建
    excel_path:
            需要赋路径,如果只给文件名称则默认在脚本文件所在目录中查找
            如果不存在则报错,不会自动创建    
'''


# 头循环
for i in range(title_start, title_num):
    data_row_title = sheet.row(i)
    print(f"头名:{data_row_title[0].value}")

    # 将第i行数据按格式写入txt文件
    f.write("Topo2020n")
    f.write("Rivernamen")
    f.write(f"    {str(data_row_title[1].value)}")
    f.write("n")
    f.write("COORDINATESn")
    f.write("    0n")
    f.write("FLOW DIRECTIONn")
    f.write("    0n")
    f.write("PROTECT DATAn")
    f.write("    0n")
    f.write("DATUMn")
    f.write("      0.00n")
    f.write("RADIUS TYPEn")
    f.write("    0n")
    f.write("DIVIDE X-Sectionn")
    f.write("0n")
    f.write("SECTION IDn")
    f.write(f"    {str(data_row_title[0].value)}")
    f.write("n")
    f.write("INTERPOLATEDn")
    f.write("    0n")
    f.write("ANGLEn")
    f.write("    0.00   0n")
    f.write("RESISTANCE NUMBERSn")
    f.write("   0  0     1.000     1.000     1.000    1.000    1.000n")


# 计算第i行头文件中对应的数据行数
    for k in range(title_num + profile, sheet.nrows):
        print(f"k:{k}")
        data_row_body = sheet.row(k)
        if data_row_body[0].value == data_row_title[0].value:
            k_start_value = k
            print(f"k_start:{k_start_value}")
        if data_row_body[2].value == -1:
            k_ended_value = k
            print(f"k_ended:{k_ended_value}")
            PROFILE = k_ended_value - k_start_value
            f.write(f"PROFILE {PROFILE}")
            print(f"PROFILE {PROFILE}")
            f.write("n")
            break
        else:
            continue


#获取截面最小值
    for s in range(title_num + profile + 1, sheet.nrows):
        data_row_body = sheet.row(s)
        print(f"value:{data_row_body[1].value}")
        # if data_row_body[2].value == -1:
        #     break
        if data_row_body[1].value <= MIN:
            MIN = data_row_body[1].value
        if data_row_body[2].value == -1:
            break
        print(f"MIN:{MIN}")


# 访问头数据对应数据得到"#n"
    for m in range(title_num+profile+1, sheet.nrows):
        data_row_body = sheet.row(m)
        if data_row_body[2].value == -1:
            end_num = m
        # f.writelines(str(data_row_body[0].value))
        f.writelines('%.4f'% data_row_body[0].value)
        f.write(f"  {'%.4f'% data_row_body[1].value}")
        f.write(" 1.000")
        if m == title_num + profile +1:
            f.write("     <#1>")
        elif data_row_body[1].value == MIN:
            f.write("     <#2>")
        elif m == end_num:
            f.write("     <#4>")
        else:
            f.write("     <#0>")
        f.write("     0     0.000     0")
        f.write("n")

        if data_row_body[2].value == -1:
            break

    # 最小值复位
    MIN = 6666.66
    profile = PROFILE + profile + 1
    f.write("Level PARAMSn")
    f.write("0  0    0.000  0    0.000  50n")
    f.write("*******************************n")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值