在Spyder中更改python脚本的缩进

时间:2019-01-29 09:43:00

标签: python python-3.x indentation spyder

我有一个很长的python脚本。 我想对其进行一些更改。但是它使用2个空格缩进,而我想使用 TAB 4个空格缩进。

我知道在编写脚本时如何更改缩进。

  

工具>>>首选项>>>编辑器>>>高级设置>>>缩进字符

但是它不适用于现有脚本。

那么如何在文件中将缩进更改为4个空格或TAB?

PS: 目前,我没有其他可以使用的编辑器。因此,我只使用spyder。(和Notepad ++)

1 个答案:

答案 0 :(得分:2)

解决方案1)

如评论中所建议,只需用" "(4个空格)查找并替换" "(2个空格)。这也可以替换代码中的双倍空格,但这是最简单,最快的解决方案。提防带有双空格的硬编码字符串,这些字符串会损坏。

解决方案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标志)
  • 需要外部(...)...(其内容)视为一个组,因此我可以轻松地将其检索(这是match.groups()[0]中的gen_replacement_string)< / li>
  • 内部(?: )+是一个不被捕获的组,它一次或多次重复,并且匹配两个空格

因此,总而言之,我将匹配出现在行首的所有空格为2的倍数的纯字符串。那就是我们想要的缩进。

re.sub的第二个参数是我用来动态生成替换字符串的函数,因为我们希望它具有与原始字符串相同的缩进深度。这发生在gen_replacement_string中。