python 实现自动插入配置文件,自动插入代码

在目录下增加如下图红框的文件,我希望自动更新对应红框文件名的配置文件config.txt,以及在cpp文件中自动插入相应的代码

 实现代码如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import os
import json

a = "EV_EVENT"
b = "\""
c = "{"
d = "}"
e = "_"
f = ":"
g = " "
h = ","
tab = "    "

kBindInsertFlag = "//insert code"
kFuncInsertFlag = "//insert function code"
kConFile = "config.txt"
kGenBindFuncFileTest = "genBindFunc.cpp"
kGenFuncFileTest = "genFunc.cpp"
kGenBindFuncFile = "InfoProviderReceiver.cpp"
kGenFuncFile = "InfoProviderReceiver.cpp"
fo1 = open(kGenBindFuncFileTest, "w")
fo2 = open(kGenFuncFileTest, "w")


def insertCode(filename, filenameadd, kInsertFlag):
    file = open(filename, "r")
    file_add = open(filenameadd, "r")
    content = file.read()
    content_add = file_add.read()
    pos = content.find(kInsertFlag)
    if pos != -1:
        content = content[:pos] + content_add + content[pos:]
        file = open(filename, "w")
        file.write( content )

        file.close()
        file_add.close()

        print ("insert code success \n")
    return

def genBindCallBackAndSubscribe(basename,root):
    fo1.write("    // "+b+"Register "+basename+" Info Receive Callback"+b+"\n")
    fo1.write("    m_pcEventReceiver->Subscribe(EV_EVENT_"+root[2:].upper()+ \
                e+basename.upper()+", boost::bind(&InfoProviderReceiver::Recv"+ \
                root[2:]+basename+", this, _1));\n\n")
    return

def genFunction(basename,root):
    str = "if (nullptr == pMsg) { \n \
        return;\n\
    }"
    str1 = "if (nullptr == msg) {\n\
        return;\n\
    }"
    fo2.write("void\n")
    fo2.write("InfoProviderReceiver::Recv"+root[2:]+basename+"(void* pMsg)\n")
    fo2.write(c+"\n")
    fo2.write(tab+"INFO_LOG(\"[InfoProviderReceiver]-------------Recv"+root[2:]+basename+"\\n\");\n")
    fo2.write(tab+str+"\n")
    fo2.write(tab+root[2:]+"::"+basename+"* msg = reinterpret_cast<"+root[2:]+"::"+basename+"*>(pMsg);\n")
    fo2.write(tab+str1+"\n")
    fo2.write(tab+root[2:]+"::"+basename+"* copyMsg = new "+root[2:]+"::"+basename+"();"+"\n")
    fo2.write(tab+"copyMsg->Swap(msg);" + "\n\n")
    fo2.write(tab+"if (nullptr != m_pTransThread) {"+"\n")
    fo2.write(tab*2+"InfoProviderM2VRequest* request = new InfoProviderM2VRequest(EV_EVENT_"+\
                root[2:].upper()+e+basename.upper()+", copyMsg);\n")
    fo2.write(tab*2+"m_pTransThread->PostRequest(request);"+"\n")
    fo2.write(tab+d+"\n"+d+"\n")    

def LoadJsonConfig(filename):
    fileobj = open(filename)
    filecontent = fileobj.read()
    # print filecontent
    fileobj.close()
    jsonobj = None
    try:
        jsonobj = json.loads(filecontent)
    except Exception as e:
        print("### LoadJsonConfig ERROR")
    else:
        print("### LoadJsonConfig OK")
    return jsonobj

def genJsonDict(basename,root):
    keyObjName = a+e+root[2:].upper()+e+basename.upper()
    keyObjSubName = "name"
    ObjSubNameValue = root[2:]+"::"+basename
    keyObjSubType = "type"
    ObjSubTypeValue = "EV_IPC,EV_INP"
    subDict = {keyObjSubName:ObjSubNameValue, keyObjSubType:ObjSubTypeValue}
    Dict = {keyObjName:subDict}
    return Dict


def main():
    filePath='./'
    fileType='.proto'

    # fo = open("test2.txt", "w")

    # load config
    jsonobj= LoadJsonConfig(kConFile)
    EventNameDict = jsonobj["EV_EVENT"]

    for root, dirs, files in os.walk(filePath):
        for name in files:
            flag = False
            if fileType in name:
                basename = os.path.splitext(name)[0]
                keyObjName = a+e+root[2:].upper()+e+basename.upper()
                Dict = genJsonDict(basename,root)
                for key in sorted(EventNameDict.keys()):
                    if key == keyObjName:
                        print ("repeat ==== "+keyObjName)
                        flag = True
                        break
                if flag == False:
                    jsonobj["EV_EVENT"].update(Dict)
                    with open(kConFile, 'w') as f:
                        json.dump(jsonobj, f, indent=4, ensure_ascii=False)

                    #creat code
                    genBindCallBackAndSubscribe(basename,root)
                    #creat code
                    genFunction(basename,root)

                    # fo.write(b+keyObjName+b+f+g+c+"\n")
                    # fo.write(tab+b+keyObjSubName+b+f+g+ObjSubNameValue+h+"\n")
                    # fo.write(tab+b+keyObjSubType+b+f+g+b+ObjSubTypeValue+b+"\n")
                    # fo.write(d+h+"\n")
    # fo.close()
    fo1.close()
    fo2.close()

    #insert to file
    insertCode(kGenBindFuncFile, kGenBindFuncFileTest, kBindInsertFlag)
    insertCode(kGenFuncFile, kGenFuncFileTest, kFuncInsertFlag)

    #delete test file
    os.remove(kGenBindFuncFileTest)
    os.remove(kGenFuncFileTest)
   

if __name__ == "__main__":
    main()

实现效果如下:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python是目前流行的一种高级编程语言,可以在多种平台上运行,具有优秀的语法结构和丰富的库函数,因而被广泛应用于开发各种类型的应用程序。其中,读取txt文件并插入数据库是Python常见的一种操作。下面,就详细介绍一下如何使用Python实现这个功能。 首先,需要准备好要读取的txt文件和数据库。可以选择常用的MySQL、Oracle等关系型数据库,也可以使用轻量级的SQLite数据库。请确保数据库和txt文件在同一台机器上并且已经成功安装和配置。 接下来,使用Python的内置模块`open()`打开文件并使用`readlines()`函数读取文件中的内容。具体的代码如下: ``` f = open('data.txt', 'r') lines = f.readlines() f.close() ``` 在读取完成后,需要使用PyMySQL等数据库连接库,建立数据库连接并打开一个游标。然后可以使用插入语句将读取的txt文件中的数据插入到数据库中。具体的代码如下: ``` import pymysql # 建立数据库连接 conn = pymysql.connect(host='localhost', user='root', password='123456', database='test') cursor = conn.cursor() # 插入数据到数据库中 for line in lines: data = line.strip().split(',') sql = "insert into user (name, age, gender) values (%s, %s, %s)" cursor.execute(sql, data) # 提交事务并关闭数据库连接 conn.commit() cursor.close() conn.close() ``` 在以上代码中,插入语句是将读取的每一行数据分解成三个字段分别插入到名为user的表中。最后,记得提交事务和关闭数据库连接。 以上便是使用Python读取txt文件并插入数据库的方法。本方法操作简单、高效,并且代码易读易懂,适用于初学者和需要快速编写脚本的开发者。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值