Hier ein Beispiel ist die inspect.getsoucelines
und einige regex:
import inspect
import re
def update_doc(func, indent=' '):
sourcelines = inspect.getsourcelines(func)[0]
doc = func.__doc__
if doc is not None:
ind = [line.decode('string_escape').strip()[1:-1]
for line in sourcelines].index(doc)
sourcelines[ind] = '{}"""{}"""\n'.format(indent,
re.sub(r'\n([ \t]+)', r'\n'+indent, doc))
return ''.join(sourcelines)
Demo:
def a():
'\n\tthis\n\tis\n\tthe docstring.\n\t'
print 'hello world'
print update_doc(a)
def b():
'\n This is\n not so lengthy\n docstring\n '
print 'hmm...'
print update_doc(b)
Output
:
def a():
"""
this
is
the docstring.
"""
print 'hello world'
def b():
"""
This is
not so lengthy
docstring
"""
print 'hmm...'
P. S: Ich habe es nicht gründlich noch nicht getestet, aber das sollte Ihnen den Einstieg.
Das lässt mich fragen, wie der Docstring überhaupt so geschrieben wurde. Es scheint, dass es besser wäre, das an der Quelle zu beheben (da ich keine Menschen kenne, die DocStrings so schreiben ;-) – mgilson
nach einer 'Ast.NodeTransform' und ich kann den Code Generator nicht bekommen, um es zu schreiben im schönen Format, ohne alle Strings neu zu schreiben. – baallezx
Was genau meinst du mit hübschem Druck? Offensichtlich interpretieren Sie Escape-Sequenzen, aber auch Einrückung, Zeilenumbruch, Übereinstimmung mit [PEP 257] (http://legacy.python.org/dev/peps/pep-0257/), ...? Wenn ja, * listet * bitte explizit Ihre Anforderungen für diese Umwandlung auf. –