使用 python 删除/替换多行代码部分

2024-01-26

我试图在 python 的帮助下从各种文件中删除包含废弃代码片段的多行。我寻找了一些例子,但无法真正找到我想要的东西。我基本上需要的是原则上执行以下操作(包含非 python 语法):

def cleanCode(filepath):
"""Clean out the obsolete or superflous 'bar()' code."""
with open(filepath, 'r') as foo_file:
    string = foo_file[index_of("bar("):]
    depth = 0
    for char in string:
        if char == "(": depth += 1
        if char == ")": depth -= 1
        if depth == 0: last_index = current_char_position
with open(filepath,'w') as foo_file:
    mo_file.write(string)

问题是我正在解析并想要替换的构造could包含其他嵌套语句,这些语句也需要作为bar(...)移动。

以下是要清理的示例代码片段的样子:

annotation (
  foo1(k=3),
  bar(
    x=0.29,
    y=0,
    bar1(
    x=3, y=4),
    width=0.71,
    height=0.85),
  foo2(System(...))

我认为有人之前可能已经解决了类似的问题:)


Pyparsing 有一些用于匹配嵌套括号文本的内置函数 - 在您的情况下,您并不是真正尝试提取括号的内容,您只是想要最外面的“(”和“)”之间的文本。

from pyparsing import White, Keyword, nestedExpr, lineEnd, Suppress

insource = """
annotation (
  foo1(k=3),
  bar(
    x=0.29,
    y=0,
    bar1(
    x=3, y=4),
    width=0.71,
    height=0.85),
  foo2(System(...))
"""

barRef = White(' \t') + Keyword('bar') + nestedExpr() + ',' + lineEnd

out = Suppress(barRef).transformString(insource)
print out

Prints

annotation (
  foo1(k=3),
  foo2(System(...))

编辑:解析操作以不删除以“85”结尾的 bar() 调用:

barRef = White(' \t') + Keyword('bar') + nestedExpr()('barargs') + ','
def skipEndingIn85(tokens):
    if tokens.barargs[0][-1].endswith('85'):
        raise ParseException('ends with 85, skipping...')
barRef.setParseAction(skipEndingIn85)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 python 删除/替换多行代码部分 的相关文章

随机推荐

  • Apple 推送通知中的表情符号支持

    我正在开发名为 INTERSTIZIO 的 iPhone 应用程序 在这个应用程序中 我实现了用户之间聊天等功能 在此用户可以发送文本 位置和带有表情符号的文本 如果应用程序在接收端未处于打开模式 则从后端发送生成推送并显示给接收者 我可以
  • if 和 for 循环包含在 while 循环 VBA 中

    我正在尝试编写一些代码 循环在一个列中抛出一列数据 并将其与同一工作表中另一列中的数据进行匹配 当两个数据点匹配时 相应的数据将被复制到第一个数据点旁边 最简单的表达方式是我在 while 循环内的 for Staten 内有一个 if 语
  • 用于通过电子邮件发送活动电子表格的 Google Apps 脚本

    我在网上找到了一个脚本 它可以获取当前工作表 将其复制到临时的新电子表格中 将其转换为 PDF 并通过电子邮件发送 我能够让它工作 但尝试将其设置为仅发送特定范围 尝试了一下 但无论如何我都不是一个好的编码员 或者 我也有兴趣弄清楚如何让它
  • CGIHTTPRequestHandler 在 python 中运行 php 或 python 脚本

    我正在 Windows 上编写一个简单的 python Web 服务器 它可以工作 但现在我想运行动态脚本 php 或 py 而不仅仅是 html 页面 这是我的代码 from BaseHTTPServer import HTTPServe
  • Oracle数据库连接超时设置

    如果一段时间不活动 与 Oracle 数据库的连接会被断开 这会导致错误 gt end of file on communication channel 客户端计算机上是否有任何 Oracle 设置 sqlnet ora 或某种环境变量 可
  • 绑定和连接之间有什么关系?

    我的印象是 gt gt 由 Haskell 使用 和join 数学家更喜欢 是 相等的 因为一个可以用另一个来写 import Control Monad join join x x gt gt id x gt gt f join fmap
  • 是否值得对数据库中的电子邮件地址进行加密?

    我已经在使用了加盐哈希 http www matasano com log 958 enough with the rainbow tables what you need to know about secure password sch
  • 用vb6实现多线程

    我的任务是通过连接到电脑的多个串行端口实现自动化过程 我如何使用 vb6 实现多线程 以通过附加的串行端口独立执行一些自动化任务 提前致谢 不 vb6 不支持多线程 它通过破解 winapi 在 vb5 中工作 但在 vb6 中完全被破坏
  • JSF不支持跨域验证,有解决方法吗?

    JSF 2 0 只允许您验证一个字段上的输入 例如检查它是否具有特定长度 它不允许您有一个表格 其中显示 输入城市和州 或仅输入邮政编码 你是怎么解决这个问题的 我只对涉及 JSF 验证阶段的答案感兴趣 我对将验证逻辑放入托管 Bean 不
  • 交叉验证 SPARK 期间的自定义评估器

    我的目标是向 CrossValidator 函数 PySpark 添加基于排名的评估器 cvExplicit CrossValidator estimator cvSet numFolds 8 estimatorParamMaps para
  • Angular 2子路由会刷新父路由吗

    我有一个应用程序 在某些情况下 我在父路线的子路线之间进行路线 一个看起来像example com a 1 其他example com a 2 将从切换1 to 2触发页面的重新加载 渲染a 就像播放视频一样a并且有一个与该视频同级的路线出
  • equals 和 hashCode 的通用反射辅助方法

    我正在考虑为 equals 和 hashCode 创建一个反射辅助方法 在 equals 的情况下 辅助方法会通过反射 API 查找 objectA 的字段 并将它们与 objectB 的字段进行比较 对于 hashCode 辅助方法会检查
  • Common Lisp 中的 comma-comma-at

    我对 comma comma at 的作用感到困惑 使用 comma comma at 的示例如下定义 Lisp 宏时是否需要使用双引号 双逗号 https stackoverflow com questions 17938242 is t
  • 注册DLL时出错

    我正在尝试使用命令 regsvr32 dll name dll 注册 DLL 但出现以下错误 模块 Addition dll 已加载 但 找不到入口点 DLLRegisterServer 确保 Addition dll 是有效的 DLL 或
  • AppleScript 和 Mail.app:检查新消息是否包含字符串

    我正在编写一个脚本来检查是否已提交特定的网络表单 到目前为止 脚本内容如下 tell application Mail check for new mail set newmail to get the unread count of in
  • 将 Json String 反序列化为多种 Object 类型

    我有一个从网络服务获得的 Json 字符串 它有一个集合列表 每个集合代表一个对象 例如 Root List First Collection Team Object id 1 team name Equipe Saidi is activ
  • 找不到驱动器 ID。您有权查看此文件吗? Android 谷歌驱动器集成

    我正在使用以下代码github https github com googledrive android demos blob master src com google android gms drive sample demo Edit
  • 基于判别器的 Typescript 窄参数类型

    我有一个旧版 API 如下所示 游乐场链接 https www typescriptlang org play code C4TwDgpgBAwg9gWwQQwHYBMCMUC8UDeAUFCVAMYLoBcUARAiFAGYCWATgM7
  • Django 使用证书身份验证连接到 Postgresql

    在 Django 1 9 中 我必须在 settings py 中进行哪些更改才能使用证书身份验证连接到 postgresql 数据库 将其添加到settings py为我工作 import os DATABASES default ENG
  • 使用 python 删除/替换多行代码部分

    我试图在 python 的帮助下从各种文件中删除包含废弃代码片段的多行 我寻找了一些例子 但无法真正找到我想要的东西 我基本上需要的是原则上执行以下操作 包含非 python 语法 def cleanCode filepath Clean