Изменить отступ сценария Python в Spyder - PullRequest
0 голосов
/ 29 января 2019

У меня очень длинный скрипт на python.Я хочу внести в него некоторые изменения.Но он использует отступ с двумя пробелами, в то время как я хочу использовать отступ TAB или 4 пробела .

Я знаю, как изменять отступы при написании сценария.

Инструменты >>> Настройки >>> Редактор >>> Расширенные настройки >>> Символы отступа

Но он не работает с существующими сценариями.

Так как можноЯ изменил отступы на 4 пробела или TAB в моем файле?

PS: Пока у меня нет других редакторов для работы.Так что я застрял только с spyder. (И Notepad ++)

1 Ответ

0 голосов
/ 29 января 2019

Решение 1)

Как предлагается в комментарии, просто найдите и замените " " (2 пробела) на " " (4 пробела).Это также может заменить пробелы в вашем коде, но это самое простое и быстрое решение.Остерегайтесь жестко закодированных строк с двойными пробелами, они сломаются.

Решение 2)

Регулярные выражения!В другом скрипте (или консоли) выполните:

import re
with open('my_script_with_2_spaces.py') as fp:
  text = fp.read()

def gen_replacement_string(match):
  print(match)
  print(match.groups())
  return '    '*(len(match.groups()[0])//2)

with open('my_script_with_4_spaces.py', 'w') as fp:
  fp.write(re.sub(r'^((?:  )+)', gen_replacement_string, text, flags=re.MULTILINE))

Что делает регулярное выражение?

  • ^ соответствует началу строки (требуется MULTILINE flag)
  • внешний (...) необходим, чтобы рассматривать ... (его содержимое) как одну группу, поэтому я могу легко его извлечь (это match.groups()[0] in gen_replacement_string)
  • внутренняя (?: )+ - это группа без захвата, повторенная один или более раз, которая соответствует двум пробелам

Итак, в общем, я сопоставлю все строки, содержащие только пробелы, с несколькими-длины двух, которые появляются в начале строки.Это требуемый отступ.

re.sub принимает в качестве второго параметра функцию, которую я использую для динамической генерации строки замены, поскольку мы хотим, чтобы она имела ту же глубину отступа, что и оригинал.Это происходит в gen_replacement_string.

...