2014-07-15 15 views
5

Ich habe eine Python-Datei mit rohen Strings als Docstrings.Wie würde ich einen Python Docstring hübsch drucken?

def a(): 
    '\n\tthis\n\tis\n\tthe docstring.\n\t' 
    print 'hello world' 

wie würde ich schreiben die docstring aussehen

def a(): 
    """ 
    this 
    is 
    the docstring. 
    """ 
    print 'hello world' 
+10

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

+2

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

+1

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. –

Antwort

2

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.

+0

Aber wie könnte ich das verwenden, um eine Datei tatsächlich neu zu schreiben? Fügen Sie diese Funktion jeder Datei hinzu und rufen Sie diese Methode nach jeder Funktion auf. Verwenden Sie dann etwas wie sed, um die Ausgabe zu erfassen und in einer neuen Datei zu speichern. – baallezx

1

Pyment ermöglicht das Erstellen, Harmonisieren und Konvertieren von Docstrings.

Es kann derzeit nicht vorgeschlagen werden, rohe Beschreibung als \n zu erweitern, aber es könnte leicht sein, diese Funktionalität hinzuzufügen. Sie können ein Problem öffnen, um es anzufordern.