如何修复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.py
( file.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来查找缩进