度申C#库自动生成Python API函数接口

前言

在度申提供的SDK中有一个XML文件,里面详细说明了C#库中各个API接口的功能、参数、返回值


API接口都定义在DVPCamera这个类中,大概有2000多行,200多个接口

思路

由于Python是弱类型的语言,不需要类型定义,于是这就为自动转换提供了方便,观察C#的接口结构,可以将信息分为以下几类:函数功能说明,形参英文变量名,形参中文解释,函数名,返回值中文解释等
我们可以利用正则表达式,分别将这几类信息提取出来,然后放到准备好的Python函数模板中就可以了,Python的函数格式如下,只需要替换某些信息即可:

代码实现

代码如下:

#  //  X:/软件/C#库调用测试/自动化API生成之完整流程.py
#  //  Copyright (c) 2023.
#  //  @Time    : 2023/2/14   13:35:44
#  //  @Author : 张稚琦
#  //  @Address: 湖北理工学院腾龙公寓 6131
#  //  @Email   : zhang@zhang.mba / zhangzhiqi828@gmail.com / zhangzhiqi@lh83.onmicrosoft.com / 2272358828@qq.com
#  //  @File      : 自动化API生成之完整流程.py
#  //  @LastModified: 2023/2/14 下午1:35
#  //  @ProjectName : C#库调用测试
import re

with open('text.txt', 'r', encoding='utf-8') as f:
    text = f.read()

sections = text.strip().split('\n\n')
all=""
# 输出结果
for section in sections:
    # print(section)
    # print('*'*50)

    #提取函数名 和 形参列表
    pattern = r'(\w+)\s*\((.*?)\);'
    match = re.search(pattern, section)

    if match:
        # 提取函数名和形参变量名
        func_name = match.group(1)
        params = match.group(2)
        # 去除空格和换行符
        params = re.sub(r'\s+', '', params)
        # 分割形参变量名
        param_names = params.split(',')
        # print('Function name:', func_name)
        # print('Parameter names:', param_names)

    # 使用正则表达式提取param标签中的文字
    param_list = re.findall(r'<param name=".*?">(.*?)</param>', section, re.DOTALL)

    # print(param_list)
    # 提取返回值说明
    returns = re.findall(r'<returns>(.*?)</returns>', section)
    if not returns:
        returns=[""]
    # print(returns)

    #提取para说明
    result = re.findall(r"<para>(.*?)</para>", section, flags=re.S)
    # print(result)

    #提取函数说明
    summary_pattern = r'<summary>(.+?)<\/summary>'
    match = re.search(summary_pattern, section, flags=re.DOTALL)

    if match:
        summary_text = match.group(1).strip()
        # print(summary_text)
        lines = summary_text.split('\n')
        first_line = lines[0].replace('///', '').strip()
        # print(first_line)

    result1=[f'{x}:{y}\n'for x,y in zip(param_names,param_list)]
    # print(result1)
    tmp="\t:param "+"\t:param ".join(result1)
    # print(tmp)
    all+=f'\ndef {func_name}(self,{",".join(param_names)}):\n\t"""\n\t{first_line}\n{tmp}\t:return:{returns[0]}\n\t"""\n\treturn self.instance.{func_name}({",".join(param_names)})\n'
    # print(all)
#写入文件中
with open('success.txt', 'w', encoding='utf-8') as f:
    f.write(all)

转换后的效果

效果如下:

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇