方案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
旗)
-
外部
(...)
需要考虑
...
(它的内容)作为一个组,这样我就可以轻松地检索它(它是
match.groups()[0]
在里面
gen_replacement_string
)
-
内部
(?: )+
是一个非捕获组,重新分配了一次或多次,与两个空格匹配
总之,我将只匹配所有空格的字符串,其长度是行首的两倍。这就是我们想要的压痕。
re.sub
将我用来动态生成替换字符串的函数作为第二个参数,因为我们希望它具有与原始字符串相同的缩进深度。这发生在
发电机更换串
.