【问题标题】:How do I autoformat some Python code to be correctly formatted?如何自动格式化一些 Python 代码以正确格式化?
【发布时间】:2011-02-07 04:36:47
【问题描述】:

我有一些现有的代码格式不一致——有时两个空格用于缩进,有时四个空格等等。代码本身是正确且经过良好测试的,但格式很糟糕。

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

【问题讨论】:

标签: python formatting


【解决方案1】:

autopep8

autopep8 会自动格式化你的 python 脚本。不仅是代码缩进,还有其他编码间距样式。它使您的 python 脚本符合 PEP8 样式指南。

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

更新:

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

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:

黑色

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

【讨论】:

  • [ Webserver - ~/scripts ]$ autopep8 -i 2c.py [ Webserver - ~/scripts ]$ python 2c.py 文件“2c.py”,第 9 行来自 requests.adapters 导入 HTTPAdapter ^ IndentationError:意外缩进不适合我...
  • Python 代码块是由它们的缩进定义的,所以修复缩进是你的工作而不是 autopep8。工具不能也不应该改变缩进级别。
  • 我不同意黑色> yapf。在许多情况下,黑色太不灵活了。很多东西是无法配置的。我知道这是黑色的作者想要实现的目标,但如果有人试图在我的项目中做出决定,我无法忍受。尤其是在公司等真实生产环境中工作时,当编程不仅仅是某种科学游戏时,您需要与许多人和/或部门就风格达成一致。而 this 正是黑色 可怕地失败 的地方,它的“不妥协” blabla。
【解决方案2】:

编辑:现在,我推荐autopep8,因为它不仅可以纠正缩进问题,而且(由您自行决定)使代码符合许多其他 PEP8 准则。


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

您也可以在web 上找到它。

此脚本尝试将任何 python 脚本转换为符合 4-space 标准。

【讨论】:

  • 完美。谢谢!我用find . -type f -name "*.py" | xargs python reindent.py --nobackup
  • 在Fedora下需要安装python-tools包才能得到reindent.py
  • 它在小牛队的位置在哪里?
  • @avi:通常你可以查到答案here,但由于小牛队太老了,我猜应该在python2.7-examples
  • 这些天你应该推荐black
【解决方案3】:

使用black。它故意只有一个选项(行长)以确保许多项目的一致性。它强制执行 PEP8。

【讨论】:

【解决方案4】:

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

在 PyCharm 中:

1.选择所有代码:

[ctrl]+[A]

2。格式化所有代码

[ctrl]+[alt]+[L]

【讨论】:

  • [strg]是什么按钮?
【解决方案5】:

某些编辑器具有自动格式化功能,可以为您执行此操作。 Eclipse 就是一个例子(尽管您可能必须安装一个 python 插件)。

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

【讨论】:

  • +1 用于 Eclipse 自动格式化。只需打开文件并在eclipse中重新保存即可。它将修复缩进,删除括号和 args 之间的错误空格,在列表和 args 中的逗号后添加空格,在“=”符号周围添加正确的间距,以及所有其他 PEP 8 优点。
  • 不,不会的。开箱即用的 Eclipse 格式对 Python 脚本不起作用,即使按原样安装 PyDev 也是如此。
  • 谁否定我的评论,证明我错了,或者再次否定我,不管你的船是什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-20
  • 2012-03-13
  • 2011-11-24
  • 2011-03-29
  • 2021-08-10
  • 1970-01-01
相关资源
最近更新 更多