是否有可用的 Python 脚本或工具可以从 Python 源代码中删除注释和文档字符串?
它应该处理以下情况:
"""
aas
"""
def f():
m = {
u'x':
u'y'
} # faake docstring ;)
if 1:
'string' >> m
if 2:
'string' , m
if 3:
'string' > m
所以最后我想出了一个简单的脚本,它使用标记化模块并删除注释标记。它似乎工作得很好,除了我无法在所有情况下删除文档字符串。看看你是否可以改进它以删除文档字符串。
import cStringIO
import tokenize
def remove_comments(src):
"""
This reads tokens using tokenize.generate_tokens and recombines them
using tokenize.untokenize, and skipping comment/docstring tokens in between
"""
f = cStringIO.StringIO(src)
class SkipException(Exception): pass
processed_tokens = []
last_token = None
# go thru all the tokens and try to skip comments and docstrings
for tok in tokenize.generate_tokens(f.readline):
t_type, t_string, t_srow_scol, t_erow_ecol, t_line = tok
try:
if t_type == tokenize.COMMENT:
raise SkipException()
elif t_type == tokenize.STRING:
if last_token is None or last_token[0] in [tokenize.INDENT]:
# FIXEME: this may remove valid strings too?
#raise SkipException()
pass
except SkipException:
pass
else:
processed_tokens.append(tok)
last_token = tok
return tokenize.untokenize(processed_tokens)
我还想在大量具有良好单元测试覆盖率的脚本上对其进行测试。你能推荐这样一个开源项目吗?
原文由 Anurag Uniyal 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是做的工作:
我在文档字符串和注释的位置留下存根注释,因为它简化了代码。如果你完全删除它们,你也必须去掉它们之前的缩进。