How to fix Python indentation

前端 未结 13 1303
梦毁少年i
梦毁少年i 2020-11-22 08:17

I have some Python code that have inconsistent indentation. There is a lot of mixture of tabs and spaces to make the matter even worse, and even space indentation is not pre

相关标签:
13条回答
  • 2020-11-22 08:48

    I would reach for autopep8 to do this:

    $ # 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
    

    Note: E101 and E121 are pep8 indentation (I think you can simply pass --select=E1 to fix all indentation related issues - those starting with E1).

    You can apply this to your entire project using recursive flag:

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

    See also Tool to convert Python code to be PEP8 compliant.

    0 讨论(0)
  • 2020-11-22 08:48

    On most UNIX-like systems, you can also run:

    expand -t4 oldfilename.py > newfilename.py
    

    from the command line, changing the number if you want to replace tabs with a number of spaces other than 4. You can easily write a shell script to do this with a bunch of files at once, retaining the original file names.

    0 讨论(0)
  • 2020-11-22 08:49

    Use the reindent.py script that you find in the Tools/scripts/ directory of your Python installation:

    Change Python (.py) files to use 4-space indents and no hard tab characters. Also trim excess spaces and tabs from ends of lines, and remove empty lines at the end of files. Also ensure the last line ends with a newline.

    Have a look at that script for detailed usage instructions.

    0 讨论(0)
  • 2020-11-22 08:49

    autopep8 -i script.py

    Use autopep8

    autopep8 automagically formats Python code to conform to the PEP 8 nullstyle guide. It uses the pep8 utility to determine what parts of the nullcode needs to be formatted. autopep8 is capable of fixing most of the nullformatting issues that can be reported by pep8.

    pip install autopep8
    autopep8 script.py    # print only
    autopep8 -i script.py # write file
    
    0 讨论(0)
  • 2020-11-22 08:51

    Try IDLE, and use Alt + X to find indentation.

    0 讨论(0)
  • 2020-11-22 08:58

    If you're using Vim, see :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.
    

    For example, if you simply type

    :ret
    

    all your tabs will be expanded into spaces.

    You may want to

    :se et  " shorthand for :set expandtab
    

    to make sure that any new lines will not use literal tabs.


    If you're not using Vim,

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

    will replace tabs with spaces, assuming tab stops every 8 characters, in file.py (with the original going to file.py.bak, just in case). Replace the 8s with 4s if your tab stops are every 4 spaces instead.

    0 讨论(0)
提交回复
热议问题