如何自动格式化某些Python代码以正确格式化?


78

我有一些格式不一致的现有代码-有时两个空格用于缩进,有时四个空格,以此类推。代码本身是正确的,并且经过了严格的测试,但是格式却很糟糕。

在线上是否有一个地方,我可以简单地粘贴一段Python代码并自动为我缩进/设置格式?或者,是否X可以执行类似的操作,X --input=*.py并用格式化的版本覆盖每个文件?



1
在VIM:插件蟒蛇模式提供命令:PyLintAuto使用autopep8
Hotschke

Answers:


54

编辑:如今,我建议使用autopep8,因为它不仅可以纠正缩进问题,而且(根据您的判断)还可以使代码符合许多其他PEP8准则。


使用reindent.py。它应该随Python的标准发行版一起提供,尽管在Ubuntu上您需要安装该python2.6-examples软件包。

您也可以在网上找到它。

该脚本尝试转换任何符合4空间标准的python脚本。


3
完善。谢谢!我用过find . -type f -name "*.py" | xargs python reindent.py --nobackup
约翰·费米内拉

1
在Fedora下,您需要安装该python-tools软件包才能获取reindent.py
JohnTESlade 2012年

它在小牛哪里?
2013年

@avi:通常您可以在这里查找答案,但是由于Mavericks太旧了,我猜它应该在中python2.7-examples
unutbu 2014年

1
您应该推荐black这些天
鲍里斯(Boris)

84

autopep8

autopep8将自动格式化您的python脚本。不仅是代码缩进,还包括其他代码间隔样式。它使您的python脚本符合PEP8样式指南。

pip install autopep8
autopep8 your_script.py    # dry-run, only print
autopep8 -i your_script.py # replace content

更新:

许多编辑器都有pep8插件,可以在保存文件后立即自动重新格式化代码。Emacs中的py-autopep8

yapf

yapf是一种新的更好的python代码格式化程序。它试图获得最佳格式,而不仅仅是遵循准则。用法与autopep8完全相同。

pip install yapf
yapf your_script.py    # dry-run, only print
yapf -i your_script.py # replace content

欲了解更多信息,如格式化的配置,请阅读README.rstyapf github上


更新2:

黑色

黑色yapf好得多。它更智能,适合大多数复杂的格式化案例。


[Webserver-〜/ scripts] $ autopep8 -i 2c.py [Webserver-〜/ scripts] $ python 2c.py文件“ 2c.py”,requests.adapters的第9行import HTTPAdapter ^ IndentationError:意外的缩进不适用于我...
pkm 2015年

Python代码块由缩进定义,因此解决缩进是您的工作,而不是autopep8。工具不能也不应更改缩进级别。
d2207197


5

使用PyCharm找到了离线解决方案

在PyCharm中:

1.选择所有代码:

[ctrl]+[A]

2.格式化所有代码

[ctrl]+[alt]+[L]

什么是按钮[strg]
Stevoisiak

2

一些编辑器具有自动格式化功能,可以为您完成此任务。Eclipse是一个示例(尽管您可能必须安装python插件)。

您是否检查过用于该功能的编辑器?


+1用于日食自动格式化。只需打开文件并将其重新保存在Eclipse中即可。它将修复缩进,删除括号和args之间的错误空格,在列表和args中的逗号后添加空格,在“ =”符号周围添加正确的空格以及所有其他PEP 8优点。

1
不,不会。开箱即用的Eclipse格式对Python脚本无济于事,即使按原样安装PyDev也是如此。
luis.espinal,2015年

1
无论您否定我的意见,证明我是错误的,还是再次否定我,不管您的想法如何。
luis.espinal 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.