代码之家  ›  专栏  ›  技术社区  ›  Sociopath

更改spyder中python脚本的缩进

  •  0
  • Sociopath  · 技术社区  · 6 年前

    我有一个很长的python脚本。 我想做些改变。但它使用两个空格缩进,而我想使用 桌棋类游戏 4空间 压痕。

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

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

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

    那么,如何将文件中的缩进更改为4个空格或制表符呢?

    PS: 现在我没有其他的编辑可以合作。所以我只能使用Spyder。(还有记事本++)

    1 回复  |  直到 6 年前
        1
  •  2
  •   GPhilo satyendra    6 年前

    方案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 将我用来动态生成替换字符串的函数作为第二个参数,因为我们希望它具有与原始字符串相同的缩进深度。这发生在 发电机更换串 .

    推荐文章