在 Spyder 中更改 python 脚本的缩进

Change indentation of python script in Spyder

我有一个很长的 python 脚本。 我想对它做一些改变。但是它使用 2 个空格缩进,而我想使用 TAB4 个空格 缩进。

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

Tools >>> Preferences >>> Editor >>> Advanced settings >>> Indentation characters

但它不适用于现有脚本。

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

PS: 目前我没有其他编辑可以合作。所以我只能使用 spyder。(和 Notepad++)

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

所以,总而言之,我将匹配出现在行首的所有长度为二的倍数的纯空格字符串。这就是我们想要的缩进。

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