如何修复python缩进

我有一些具有不一致缩进的python代码,有很多标签和空格的混合,使事情甚至更糟,即使空间缩进不保留。

代码正常工作,但很难维护。

我怎样才能修复缩进(如“HTML tidy”,但为Python)而不破坏代码?

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

更改Python(.py)文件以使用4空格缩进和没有硬标签字符。 同时修剪多余的空格和制表符,并删除文件末尾的空行。 还要确保最后一行以换行符结束。

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

如果您使用Vim ,请参阅:h retab

  *:ret * *:retab *
 :[范围] ret [ab] [!] [new_tabstop]
                        replace包含a的所有空白序列
                        使用新的新空白string<Tab>
                        给定的tabstop值。 如果你没有指定一个新的
                         Tabstop的大小,或者它是零,Vim使用当前值
                         'tabstop'。
                         “tabstop”的当前值始终用于
                        计算现有选项卡的宽度。
                        用!,Vim也replace了只有正常的string
                        空格与适当的选项卡。
                        当'expandtab'打开时,Vim将用所有的选项卡replace
                        适当数量的空间。
                        该命令将“tabstop”设置为给定的新值,
                        如果在默认的整个文件上执行,
                        不应该做出任何明显的改变。
                        小心:这个命令修改任何<Tab>字符
                        在C程序中的string里面。 使用“\ t”来避免
                        这(反正这是一个好习惯)。
                         “:雷泰公司!” 也可以通过改变一系列的空格
                         <Tab>字符,这可能会弄糟一个printf()。
                         {Vi无此function}
                        当| + ex_extra |时不可用 function已禁用
                        编译时间。

例如,如果你只是input

 :滞留

所有的标签将被扩展为空格。

你可能想要

 :se et“简写为:set expandtab

以确保任何新行不会使用文字标签。


如果你不使用Vim,

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

将使用空格replace制表符,假设制表符每隔8个字符停在file.pyfile.py原文转到file.py.bak ,以防万一)。 如果您的制表位是每4个空格replace8s与4s。

我会达到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和E121是pep8缩进(我想你可以简单地通过--select=E1来修复所有缩进相关的问题 – 以E1开头的那些问题)。

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

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

另请参阅将Python代码转换为符合PEP8的工具 。

使用autopep8

autopep8自动格式化Python代码以符合PEP 8 nullstyle指南。 它使用pep8实用程序来确定需要对空码的哪些部分进行格式化。 autopep8能够修复pep8可以报告的大部分空格式问题。

 pip install autopep8 autopep8 script.py # print only autopep8 -i script.py # write file 

使用vim,它不应该比打Esc,然后键入..

 :%s/\t/ /g 

..在你想改变的文件上。 这将所有的标签转换为4个空格。 如果你的间距不一致,那就更困难了。

也有PythonTidy(因为你说你喜欢HTMLTidy)它可以在这里find: http ://pypi.python.org/pypi/PythonTidy/1.16它可以做的不仅仅是清理标签。 如果你喜欢这种types的东西,这是值得一看。

如果你懒惰(像我一样),你也可以下载Wingware Python IDE的试用版,它有一个自动修复缩进的工具。 它工作得很好。 http://www.wingware.com/

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

 expand -t4 oldfilename.py > newfilename.py 

从命令行改变数字,如果你想用4个以外的空格replace标签。你可以很容易的编写一个shell脚本来同时处理一堆文件,保留原来的文件名。

由于缺less一些模块,重新编写的脚本不适用于我。 无论如何,我发现这个sed命令是完美的工作:

 sed -r 's/^([ ]*)([^ ])/\1\1\2/' file.py 

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

干杯

我有一个简单的解决scheme,这个问题。 你可以先input“:retab”然后input“:retab!”,那么一切都会好的

尝试空闲,并使用ALT + X来查找缩进