【发布时间】:2012-05-06 07:06:38
【问题描述】:
我正在尝试在 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)
问题是我正在解析并想要替换的构造可能包含其他嵌套语句,这些语句也需要作为bar(...) 删除的一部分删除。
下面是要清理的示例代码 sn-p 的样子:
annotation (
foo1(k=3),
bar(
x=0.29,
y=0,
bar1(
x=3, y=4),
width=0.71,
height=0.85),
foo2(System(...))
我认为以前可能有人解决过类似的问题:)
【问题讨论】:
-
除非你有成千上万个这样复杂的表达式,否则手工操作可能更简单,也许有
sed的帮助。如果问题足够大,足以证明正确的解决方案,那么真正的正确解决方案就是构建 AST,对其进行修改,然后将其转换回代码。万无一失,简单,大部分已经在 stdlib 中完成,但需要理解并且当您需要输出的异国编码风格时可能需要额外的工作。 -
您正在处理的代码是否也是 Python 代码?如果不是,那是什么?
-
我建议你描述你想要做什么,而不是仅仅跳到你是如何尝试去做的。这似乎有时您会在编辑器/IDE 中使用正则表达式替换或使用重构工具。
-
您的代码片段将文件的内容读入字符串,运行一个不修改字符串的循环,然后将未修改的字符串写回同一个文件。我错过了什么吗?
-
@delnan:你如何找到一个用 sed 括号括起来的字符串?
标签: python