我的程序是用 python 编写的,我使用 pythontidy 和 reindent 来清理它。但是我想要一种比重命名文件更有效的方法,我是否应该查看文档以了解如何强制重命名文件并使 pythontidy 的行为更像 reindent,即只需运行它即可使其在目录中的所有文件上运行:
$ python ./PythonTidy-1.20.py mai
mailman.py main.old.py main.py main.py.bak main.pyc
ubuntu@ubuntu:/media/Lexar/montao/montaoproject$ python ./PythonTidy-1.20.py main.py main.tidy.py
ubuntu@ubuntu:/media/Lexar/montao/montaoproject$ python ./PythonTidy-1.20.py i18n.py i18n.tidy.py
ubuntu@ubuntu:/media/Lexar/montao/montaoproject$ mv i18n.tidy.py i18n.py
ubuntu@ubuntu:/media/Lexar/montao/montaoproject$ mv main.tidy.py main.py
ubuntu@ubuntu:/media/Lexar/montao/montaoproject$ python ./reindent .
python: can't open file './reindent': [Errno 2] No such file or directory
ubuntu@ubuntu:/media/Lexar/montao/montaoproject$ python ./reindent.py .
reindented ./appengine_config.py
reindented ./i18n.py
reindented ./main.py
reindented ./util.py
reindented ./facebookapi.py
reindented ./br.py
reindented ./PythonTidy-1.20.py
reindented ./in.old.py
reindented ./login_required.py
ubuntu@ubuntu:/media/Lexar/montao/montaoproject$
答案1
我个人会使用 Python(或 shell、perl 等)脚本来执行此操作。您可以使用 find 命令并对找到的每个 .py 文件执行一些操作,但对我来说,这接近于行(3 个命令;reindent、pythontidy、mv),我会在其中编写脚本而不是尝试正确执行如此复杂的命令。我猜应该是这个,但我还没有尝试过:
find . -name '*.py' -exec python reindent.py {} \; \
-exec python PythonTidy-1.20.py {} > temp \; -exec mv temp {} \;
PythonTidy 的文档说 - 嗯,我找不到任何。
PythonTidy 的代码让这种就地整理看起来不是一种选择。显然,该脚本允许您输出到 stdout(并从 stdin 读取输入)。所以我的第一个想法是,我们可以像这样执行它:
# Don't use this!!!
% python PythonTidy.py testfile.py > testfile.py
这是否是个好主意取决于 PythonTidy 的实现;如果它在打开输出之前读入整个文件,那就没问题了。但是它没有,所以是个坏主意。