1. 利用Python内置(Python脚本)工具,帮你自动转换


Python 2.x版本,比如我安装的Python 2.7.2,其在windows下载安装好之后,就自带了相关的一些有用的工具。

其中一个叫做2to3.py,就是用来帮你实现,将Python 2.x的代码,转换为Python 3.x的代码的。

其位置位于:Python安装的根目录F:\Python34\Tools\Scripts\2to3.py

 

【如何利用2to3.py,实现将Python 2.x的代码,转换为Python 3.x的代码】    
比如我手上有个Python 2.x的python脚本:

F:\GitHub\test.py

现在,想要将其转换为Python 3.x的代码。

可以通过打开windows的cmd,进入到python34的安装目录,F:\Python34\Tools\Scripts

A  按目录转换

假设我要转换的代码所在目录在:F:\GitHub

在cmd里面输入:

F:\Python34\Tools\Scripts>python 2to3.py -w F:\GitHub\

B 按指定代码转换

F:\Python34\Tools\Scripts>python 2to3.py -w F:\GitHub\test.py


即可成功转换,对应的执行结果:

 

此时,你可以看到原先的test.py,已经变成了Python 3.x的代码了。

对应的,也多出一个bak文件:test.py.bak,两者比较一下,即可看出区别:

 

当前,对于2to3.py本身,也可以通过help查看到更多的用法:



F:\Python34\Tools\Scripts\>python 2to3.py --help
Usage: 2to3 [options] file|dir ...
 
Options:
  -h, --help            show this help message and exit
  -d, --doctests_only   Fix up doctests only
  -f FIX, --fix=FIX     Each FIX specifies a transformation; default: all
  -j PROCESSES, --processes=PROCESSES
                        Run 2to3 concurrently
  -x NOFIX, --nofix=NOFIX
                        Prevent a transformation from being run
  -l, --list-fixes      List available transformations
  -p, --print-function  Modify the grammar so that print() is a function
  -v, --verbose         More verbose logging
  --no-diffs            Don't show diffs of the refactoring
  -w, --write           Write back modified files

  -n, --nobackups       Don't write backups for modified files

  -o OUTPUT_DIR, --output-dir=OUTPUT_DIR
                Put output files in this directory instead of
                overwriting the input files.  Requires -n.
  -W, --write-unchanged-files
                Also write files even if no changes were required
                (useful with --output-dir); implies -w.
  --add-suffix=ADD_SUFFIX
                Append this string to all output filenames. Requires
                -n if non-empty.  ex: --add-suffix='3' will generate
                .py3 files.


备注

(1)如果上述不加-w参数,则默认只是把转换过程所对应的diff内容打印输出到当前窗口而已。

(2)加了-w,就是把改动内容,写回到原先的文件了。

(3)不想要生成bak文件,再加上-n即可。

(4)不想看到那一堆输出的内容,加上–no-diffs,即可。