如何把Python2的代码转换为Python3的代码
如何把Python2的代码转换为Python3的代码
如果对于python2和python3不熟悉的,可以参考:
【整理】总结Python2(Python 2.x版本)和Python3(Python 3.x版本)之间的区别
之前有机会接触到,将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
即可成功转换,对应的执行结果为:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
D:\tmp\tmp_dev_root\python\python2_to_python3>D:\tmp\WordPress\DevRoot\Python27\Tools\Scripts\2to3.py -w 34563264_data_from_site.pyRefactoringTool: Skipping implicit fixer: bufferRefactoringTool: Skipping implicit fixer: idiomsRefactoringTool: Skipping implicit fixer: set_literalRefactoringTool: Skipping implicit fixer: ws_commaRefactoringTool: 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: #<p class="phone"><strong>phone:</strong> 800.206.7886<br />@@ -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); # <p class="web"><strong>e-mail:</strong> <a href="#">sales@cinesysinc.com</a><br />@@ -151,7 +151,7 @@ foundAddr = eachItemSoup.find(attrs={"class":"addr"}); logging.debug("foundAddr=%s", foundAddr); if(foundAddr):- foundAddrUni = unicode(foundAddr);+ foundAddrUni = str(foundAddr); # <p class="addr"> # <strong>address:</strong> 740 SW 21st Ave, Suite #310<br />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,两者比较一下,即可看出区别:
![]()
当前,对于2to3.py本身,也可以通过help查看到更多的用法:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
D:\tmp\tmp_dev_root\python\python2_to_python3>D:\tmp\WordPress\DevRoot\Python27\Tools\Scripts\2to3.py -hUsage: 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,即可。
其他的,就不多介绍了。感兴趣的可以自己去继续折腾。
如何把Python2的代码转换为Python3的代码的更多相关文章
- python2.x脚本转换为python3.x脚本的方法
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/dushu990/article/details/73549174 python2.x脚本转换为pyt ...
- python 内置2to3工具将python2代码转换为python3代码
python2与python3代码不兼容,如果需要python2代码在python3环境下运行,需要将代码进行转换,本文介绍使用python3内置工具2to3.py对代码进行转换 一:2to3.py在 ...
- ios oc 代码 转换为 c++ 描述代码编译过程
clang -rewrite-objc main.m #import <Foundation/Foundation.h> #import <objc/runtime.h> // ...
- 将python2代码转为python3
将python2代码转为python3 1.2to3在anaconda的/bin文件夹下: 2.打印帮助信息 2to3 --help 3.使用2to3 -W [要转换的python2文件目录] 4.转 ...
- 使用Python3自带工具2to3.py 转换 Python2.x 代码 到Python3
几乎所有的Python 2程序都需要一些修改才能正常地运行在Python 3的环境下.为了简化这个转换过程,Python 3自带了一个叫做2to3的实用脚本(Utility Script),这个脚本会 ...
- 再见,Python2。你好,Python3
文章首发自我的公众号,转载请注明出处~ Python2的退场,意味着一个时代的结束 我们这一代程序员基本都接触过python2,很多人也是从python2时代一路走来的.但是,是时候说再见了 ...
- Python中生成器和迭代器的区别(代码在Python3.5下测试):
https://blog.csdn.net/u014745194/article/details/70176117 Python中生成器和迭代器的区别(代码在Python3.5下测试):Num01–& ...
- 学python2.7简单还是python3.0简单,两者区别
学python2.7简单还是python3.0简单,谈谈两者区别 1. 使用__future__模块 Python 3.X 引入了一些与Python 2 不兼容的关键字和特性.在Python 2中,可 ...
- [.NET] 怎样使用 async & await 一步步将同步代码转换为异步编程
怎样使用 async & await 一步步将同步代码转换为异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6079707.html ...
随机推荐
- Javascript 文件的同步加载与异步加载
HTML 4.01 的script属性 charset: 可选.指定src引入代码的字符集,大多数浏览器忽略该值.defer: boolean, 可选.延迟脚本执行,相当于将script标签放入页面b ...
- KeyTool
http://ln-ydc.iteye.com/blog/1335213 http://lukejin.iteye.com/blog/605634
- hash算法-time33算法
http://my.oschina.net/freegeek/blog/325531 http://www.cnblogs.com/napoleon_liu/articles/1911571.html ...
- ListView开发笔记
一.ListView有背景,ListItem 透明,但是在点击.拖动时变成白色 android:cacheColorHint="#0000"
- 见过的最好的Layout讲解,挺全的
见过的最好的Layout讲解,挺全的 1. http://wenku.baidu.com/link?url=-9wSWx-oLet8R51iXUbikEMWZF8DK4-n6AqoA5_fk3rtrh ...
- 记事本写hello world_Java
1 新建记事本,重命名为hello.java 2 打开hello.java,编辑并保存 class Hello { public static void main(String[] args) { S ...
- PHP 9 大缓存技术总结
1.全页面静态化缓存 也就是将页面全部生成html静态页面,用户访问时直接访问的静态页面,而不会去走php服务器解析的流程.此种方式,在CMS系统中比较常见,比如dedecms: 一种比较常用的实现方 ...
- rsync常用参数详解
rsync常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在linux中,一切皆是文件,包括你的终端,硬件设备信息,目录,内核文件等等.所以工作中我们难免会遇到拷贝文件 ...
- nsinteger 与 int 区别
在苹果的api实现中,NSInteger是一个封装,它会识别当前操作系统的位数,自动返回最大的类型. 当你不知道你的操作系统是什么类型的时候,你通常会想要使用NSInteger,所以或许你想要你的 ...
- Android手机APN设置(中国移动 联通3G 电信天翼),解决不能上网的问题
中国移动 第一步,设置CMNET上网 新建APN 1.名称:cmnet 2.APN:cmnet 3.APN类型:default 就仅仅填写上面3个选项,其它都是默认,不用填写. 第二步,设置彩信 新建 ...