2016-05-11 8 views
1

Ich brauche etwas Python 2.7 Code unter Python 2.6 und ich frage mich, wie das automatisiert werden könnte.Python 2.7 bis 2.6 automatisch zurückversetzen

Einige spezifische einfache Änderungen sind

sed -i -e 's/:,d/:d/g' -e 's/{0}/set([0])/g' foo.py 

Ich brauche aber auch

with open(foo) as f, open(bar) as b: 
    ... 

mit

with open(foo) as f: 
with open(bar) as b: 
    ... 

und es ist viel weniger offensichtlich für mich ersetzen (ich muss bekomme die Einrückung richtig und meine sed -foo ist hier nicht genug).

Irgendwelche Vorschläge?

+2

Gibt es wirklich so viele "mit x, y" -Anweisungen in Ihrer Codebasis, dass es sich lohnt, ihre Ersetzung zu automatisieren, anstatt einfach ihre Entdeckung zu automatisieren? Ich denke nicht, dass "sed" für diesen Job im allgemeinen Fall geeignet ist - Sie würden wahrscheinlich Pythons eigenes "AST" -Modul oder Ähnliches verwenden wollen - etwas, das den Python-Einzug wirklich versteht. –

+0

@JohnZwinck: Ich hoffte, dass jemand schon etwas dafür hat; wir könnten es natürlich manuell machen, aber ich denke, automatisierter ist zuverlässiger. – sds

Antwort

1

Nein, nicht sed verwenden. Was Sie brauchen, ist eine IDE, die Refactoring oder Makros versteht. Zum Beispiel ist hier, was ich in vim tun würde:

  • Suche nach dem with A as a, with B as B: Muster

  • Starten Sie die Aufnahme eines Makros qa

  • das Komma finden f,

  • es Ersetzen durch ein Doppelpunkt r:

  • Löschen der Raum dann ein Newline lx<enter>

  • Räume Tab oder Verwendung eingeben durchlaufen Sie den Durchsuchungen einrücken

  • Press q zu stoppen Aufnahme

Dann und drücken @a die replay Makro.

+0

Dies setzt voraus, dass ich möchte, dass die Änderungen permanent sind (wie in git). Ich will das nicht. – sds

+1

@sds Wenn Sie git verwenden, was ist das Problem? Erstellen Sie einen Zweig, der speziell für den Python 2.6-Code entwickelt wurde. Niederlassungen sind dezentralisiert, so dass Sie den Code nie drücken müssen. – user6321384