2016-05-11 6 views
1

Мне нужно запустить код Python 2.7 под Python 2.6, и мне было интересно, как это можно автоматизировать.Автоматический backport python 2.7 до 2.6

Некоторые конкретные простые изменения

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

Однако, мне также нужно заменить

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

с

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

и гораздо менее очевидно для меня (мне нужно получить отступ справа, и мне не достаточно sed -foo).

Любые предложения?

+2

Есть ли в вашей кодовой базе много операторов 'с x, y', что стоит автоматизировать их замену, а не просто автоматизировать их открытие? Я не думаю, что «sed» подходит для этой работы в общем случае - вы, вероятно, захотите использовать собственный модуль «AST» или аналогичный Python - то, что понимает отступ Python для реального. –

+0

@JohnZwinck: Я надеялся, что у кого-то уже есть что-то для этого; мы могли бы сделать это вручную, конечно, но я считаю, что автоматизация более надежная. – sds

ответ

1

Нет, не используйте sed. Вам нужна среда, которая понимает рефакторинг или макросы. Например, вот что я хотел бы сделать в vim:

  • Поиск по with A as a, with B as B: шаблону

  • Начать запись макроса qa

  • Найти запятая f,

  • Заменить его двоеточие r:

  • Удалить, то пространство ввода символа новой строки lx<enter>

  • Tab или использовать пробелы для отступа

  • Нажмите q, чтобы остановить запись

Затем перебирать поиска и нажмите @a переигрывать макро.

+0

Предполагается, что я хочу, чтобы изменения были постоянными (как в отношении git). Я не хочу этого. – sds

+1

@sds Если вы используете git, в чем проблема? Создайте ветвь, разработанную специально для кода Python 2.6. Филиалы децентрализованы, поэтому вам не нужно вводить код. – user6321384