简要介绍如何把Python2转换为Python3

    作者:课课家教育更新于: 2016-01-12 14:37:09

    大神带你学编程,欢迎选课

      之前有机会接触到,将Python2的代码转换为Python3的代码。

      经过一番折腾,大概有了基本概念了。

      现在简要整理一下,关于如何将Python 2.x的代码,转换为Python 3.x的代码。

      把Python 2.x的代码转换为Python 3.x代码的方法

      1.自己手动转换

      这个不必多说,如果只是涉及很少的函数,比如print等。

      那么自己改改代码,也就可以了。

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

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

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

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

      【如何利用2to3.py,实现将Python 2.x的代码,转换为Python 3.x的代码】

      比如我手上有个Python 2.x的python脚本:

      D:\\tmp\\tmp_dev_root\\python\\python2_to_python3\\34563264_data_from_site.py

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

      可以通过打开windows的cmd,定位至该要转换的脚本下,然后运行

      D:\\tmp\\WordPress\\DevRoot\\Python27\\Tools\\Scripts\\2to3.py -w 34563264_data_from_site.py

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


     

      D:\\tmp\\tmp_dev_root\\python\\python2_to_python3>D:\\tmp\\WordPress\\DevRoot\\Python27\\Tools\\Scripts\\2to3.py -w 34563264_data_from_site.py

      RefactoringTool: Skipping implicit fixer: buffer

      RefactoringTool: Skipping implicit fixer: idioms

      RefactoringTool: Skipping implicit fixer: set_literal

      RefactoringTool: Skipping implicit fixer: ws_comma

      RefactoringTool: Refactored 34563264_data_from_site.py

      --- 34563264_data_from_site.py (original)

      +++ 34563264_data_from_site.py (refactored)

      @@ -18,7 +18,7 @@

      import time;

      import codecs;

      import logging;

      -import urllib;

      +import urllib.request, urllib.parse, urllib.error;

      from datetime import datetime,timedelta;

      from optparse import OptionParser;

      from string import Template,replace;

      @@ -90,7 +90,7 @@

      foundPhone = eachItemSoup.find(attrs={"class":"phone"});

      logging.debug("foundPhone=%s", foundPhone);

      if(foundPhone):

      - foundPhoneUni = unicode(foundPhone);

      + foundPhoneUni = str(foundPhone);

      logging.debug("foundPhoneUni=%s", foundPhoneUni);

      # case 1:

      #

      phone: 800.206.7886

      @@ -122,7 +122,7 @@

      foundweb = eachItemSoup.find(attrs={"class":"web"});

      logging.debug("foundWeb=%s", foundWeb);

      if(foundWeb):

      - foundWebUni = unicode(foundWeb);

      + foundWebUni = str(foundWeb);

      logging.debug("foundWebUni=%s", foundWebUni);

      #

      e-mail: sales@cinesysinc.com

      @@ -151,7 +151,7 @@

      foundAddr = eachItemSoup.find(attrs={"class":"addr"});

      logging.debug("foundAddr=%s", foundAddr);

      if(foundAddr):

      - foundAddrUni = unicode(foundAddr);

      + foundAddrUni = str(foundAddr);

      #

      # address: 740 SW 21st Ave, Suite #310

      RefactoringTool: Files that were modified:

      RefactoringTool: 34563264_data_from_site.py


     

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

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

      

    简要介绍如何把Python2转换为Python3_python_课课家

     

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


     

      D:\\tmp\\tmp_dev_root\\python\\python2_to_python3>D:\\tmp\\WordPress\\DevRoot\\Python27\\Tools\\Scripts\\2to3.py -h

      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


     

      此处只多解释几句:

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

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

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

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

    课课家

python 更多推荐

课课家教育

未登录