python - 如何将 yapf 应用于目录下的每个 python 文件?

标签 python python-3.x yapf

我在一个项目下安装了 Google yapf(另一个 python 格式化程序)并尝试就地格式化我所有的 python 文件,但是我收到以下错误:

$ yapf -i -r files **.py
yapf: Input filenames did not match any python files

为什么 yapf 无法理解模式?我应该怎么做才能达到同样的目的?

编辑 我也按照建议尝试了 yapf -ir 但我得到了:

$ yapf -ir
usage: yapf [-h] [-v] [-d | -i] [-r | -l START-END] [-e PATTERN]
            [--style STYLE] [--style-help] [--no-local-style] [-p] [-vv]
            [files [files ...]]
yapf: error: cannot use --in-place or --diff flags when reading from stdin

这很奇怪,因为我没有从标准输入读取

最佳答案

第一个问题是通配符扩展发生在 shell 中,命令行甚至执行之前。当你运行时:

somecommand *.py

该命令不知道您键入了 *。它只知道你传入了一个文件列表。换句话说,yapf 无法理解该模式,因为它从未看到该模式。

第二个问题是 ** 不是有效的 shell 文件通配模式。这在语义上等同于 *,因此运行 yapf -ir files **.py 将只处理当前目录中包含的所有 .py 文件,并且在 files 目录中。

如果您想在所有 Python 文件上递归运行 yapf,从当前目录开始,有一些解决方案。最简单的可能是:

yapf -ir .

这将处理当前目录及其子目录中的所有 .py 文件。如果您想更好地控制文件的选择,请使用 findxargs:

find . -name '*.py' -print0 | xargs -0 yapf -i

关于python - 如何将 yapf 应用于目录下的每个 python 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53357514/

相关文章:

python - django 中的反向函数出错。无法匹配模式

Python:将函数参数的默认值传递给 *args 或 **kwargs

python - 类型错误 : unhashable type: 'list' when calling . iloc()

python - sklearn.externals 模块说明

python - 不同数组项的所有可能组合

python - 根据数据框中的其他值更改 pandas 数据框的值

python - concurrent.futures 问题 : why only 1 worker?

python - 如何配置 YAPF 以与 Black 相同的方式格式化

python - 如何在 VSCode 中使用 yapf(或 black)

python - 如何配置 YAPF 以对长参数列表使用悬挂缩进