Wahrscheinlich die einfachste, es auf die altmodische Weise zu tun. Hier ist ein erster Code, der Sie zum Laufen bringt. Es könnte wohl schöner sein, sollte aber die Grundidee geben:
def is_docstr_bound(line):
return "'''" in line or '"""' in line
# XXX: output using the same name to some other folder
output = open('output.py', 'w')
docstr_found = False
docstr = list()
with open('input.py') as f:
for line in f.readlines():
if docstr_found:
if is_docstr_bound(line):
# XXX: do conversion now
# ...
# and write to output
output.write(''.join(docstr))
output.write(line)
docstr = list()
docstr_found = False
else:
docstr.append(line)
else:
if is_docstr_bound(line):
docstr_found = True
output.write(line)
output.close()
Um es wirklich funktionierenden Sie es mit einem Datei-Finder und geben die Dateien in ein anderes Verzeichnis Haken müssen auf. Überprüfen Sie das os.path Modul als Referenz.
Ich weiß, dass die Docstring gebundene Prüfung potenziell sehr schwach ist. Es ist wahrscheinlich eine gute Idee, es ein wenig aufzurüsten (strip line und überprüfen, ob es beginnt oder endet mit einem Docstring gebunden).
Hoffentlich gibt das eine Idee, wie man möglicherweise fortfahren kann. Vielleicht gibt es eine elegantere Art, mit dem Problem umzugehen. :)
Gehen meine Verzeichnisstruktur Trog und Öffnen/Lesen/Schreiben von Dateien ist trivial. Meine Frage ist: Gibt es eine kluge Möglichkeit, alle Docstrings in einem Modul zu lesen und die Ersetzungen zu schreiben? Dies kann nicht naiv mit Mechanismen wie regulären Ausdrücken (wie re.finditer ('\ "\" (. *) \ "\"', Quelle)) getan werden, weil ich nicht durcheinander bringen will der Rest des Codes. – tomaz
Ich fand eine ähnliche Frage, die Sie vielleicht interessant finden könnten. Siehe http://stackoverflow.com/questions/768634/python-parse-a-py-file-read-the-ast-modify-it-then-write-back-the-modified. –
Docstrings müssen keine Strings in dreifacher Anführungszeichen haben, und nicht alles, was mit einem String mit drei Anführungszeichen zitiert wird, ist ein Docstring, das funktioniert nur für eine Teilmenge von Python-Docstrings. – jcdyer