在 Spyder 中更改 python 脚本的缩进
Change indentation of python script in Spyder
我有一个很长的 python 脚本。
我想对它做一些改变。但是它使用 2 个空格缩进,而我想使用 TAB 或 4 个空格 缩进。
我知道如何在编写脚本时更改缩进。
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
.
我有一个很长的 python 脚本。 我想对它做一些改变。但是它使用 2 个空格缩进,而我想使用 TAB 或 4 个空格 缩进。
我知道如何在编写脚本时更改缩进。
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
.