代码之家  ›  专栏  ›  技术社区  ›  Shay Erlichmen

如何修复Python缩进

  •  238
  • Shay Erlichmen  · 技术社区  · 15 年前

    我有一些Python代码的缩进不一致。制表符和空格的大量混合使得事情变得更糟,甚至连空格缩进都没有保留。

    代码按预期工作,但很难维护。

    HTML Tidy ,但对于Python)而不破坏代码?

    12 回复  |  直到 6 年前
        1
  •  296
  •   Trevor Boyd Smith knh170    3 年前

    使用 reindent.py 在中找到的脚本 Tools/scripts/ Python安装目录:

    将Python(.py)文件更改为使用 4-空格缩进,无硬制表符 人物。还要修剪多余的空间 和行末端的制表符,以及 删除文件末尾的空行 文件夹。还要确保最后一行结束 用一条新线。

    请查看该脚本以获取详细的使用说明。


    许多linux发行版没有 reindent 默认情况下与一起安装 python 雷登特 是做什么 pip install reindent .

    pip 是使用您的发行版软件包管理器(即。 apt-get , yum , dnf

        2
  •  64
  •   Community dbr    7 年前

    我会伸手去拿 autopep8 为此:

    $ # see what changes it would make
    $ autopep8 path/to/file.py --select=E101,E121 --diff
    
    $ # make these changes
    $ autopep8 path/to/file.py --select=E101,E121 --in-place
    

    E101 and E121 是pep8缩进(我想你可以通过 --select=E1 修复所有与缩进相关的问题(从E1开始)。

    您可以使用递归标志将其应用于整个项目:

    $ autopep8 package_dir --recursive --select=E101,E121 --in-place
    

    另见 Tool to convert Python code to be PEP8 compliant

        3
  •  59
  •   ephemient    15 年前

    如果你正在使用 Vim 看见 :h retab

                                                            *:ret* *:retab*
    :[range]ret[ab][!] [new_tabstop]
                            Replace all sequences of white-space containing a
                            <Tab> with new strings of white-space using the new
                            tabstop value given.  If you do not specify a new
                            tabstop size or it is zero, Vim uses the current value
                            of 'tabstop'.
                            The current value of 'tabstop' is always used to
                            compute the width of existing tabs.
                            With !, Vim also replaces strings of only normal
                            spaces with tabs where appropriate.
                            With 'expandtab' on, Vim replaces all tabs with the
                            appropriate number of spaces.
                            This command sets 'tabstop' to the new value given,
                            and if performed on the whole file, which is default,
                            should not make any visible change.
                            Careful: This command modifies any <Tab> characters
                            inside of strings in a C program.  Use "\t" to avoid
                            this (that's a good habit anyway).
                            ":retab!" may also change a sequence of spaces by
                            <Tab> characters, which can mess up a printf().
                            {not in Vi}
                            Not available when |+ex_extra| feature was disabled at
                            compile time.
    

    例如,如果您只需键入

    :ret
    

    所有选项卡都将展开为空格。

    你可能想

    :se et  " shorthand for :set expandtab
    


    如果您没有使用Vim,

    perl -i.bak -pe "s/\t/' 'x(8-pos()%8)/eg" file.py
    

    将用空格替换制表符,假设制表符每8个字符停止一次,以 file.py file.py.bak ,以防万一)。如果您的制表位为每4个空格一次,则将8s更换为4s。

        4
  •  56
  •   Pedro Lobito    3 年前

    autopep8 -i script.py

    使用 autopep8

    autopep8 PEP 8 nullstyle 指导它使用 pep8 该实用程序用于确定 nullcode 自动步骤8 能够修复大部分故障 nullformatting 可由以下人员报告的问题: pep8 .

    pip install autopep8
    autopep8 script.py    # print only
    autopep8 -i script.py # write file
    
        5
  •  15
  •   Peter Mortensen user1284631    6 年前

    使用Vim,它不应该比打击更复杂 ,然后键入。。。

    :%s/\t/    /g
    

    …在要更改的文件上。将所有选项卡转换为四个空格。如果你有不一致的间距,那么这将是更困难的。

        6
  •  9
  •   Peter Mortensen user1284631    6 年前

    还有 PythonTidy (因为你说你喜欢HTML)。

    它可以做的不仅仅是清理标签。如果你喜欢那类东西,值得一看。

        7
  •  5
  •   Crowman    11 年前

    在大多数类UNIX系统上,您还可以运行:

    expand -t4 oldfilename.py > newfilename.py
    

    在命令行中,如果要将选项卡替换为除4以外的多个空格,请更改数字。您可以轻松地编写一个shell脚本,一次处理一堆文件,保留原始文件名。

        8
  •  4
  •   Yansky    14 年前
        9
  •  4
  •   Peter Mortensen user1284631    6 年前

    由于缺少一些模块,reindent脚本对我不起作用。不管怎样,我找到了这个 sed 这项工作对我来说非常完美:

    sed -r 's/^([  ]*)([^ ])/\1\1\2/' file.py
    
        10
  •  2
  •   Peter Mortensen user1284631    6 年前

    试试Emacs。它很好地支持Python中所需的缩进。请检查此链接 http://python.about.com/b/2007/09/24/emacs-tips-for-python-programmers.htm

        11
  •  1
  •   Peter Mortensen user1284631    6 年前

    尝试 IDLE ,并使用 中高音 + X 查找缩进。

        12
  •  0
  •   hanqiang    11 年前

    我对这个问题有一个简单的解决办法。您可以先键入“:retab”,然后键入“:retab!”,然后一切都会好起来

        13
  •  0
  •   Mehrdad Salimi    4 年前

    在试图找到工具,使您的 2-space indented tab indented

    https://www.tutorialspoint.com/online_python_formatter.htm

        14
  •  0
  •   Kamil Kuczaj    3 年前

    还有一个名为“谷歌真棒”的项目 YAPF

    它可以自动重新格式化整个项目,或者检查项目是否具有正确的缩进/格式。我在一个商业项目中使用了它,我推荐它。