Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作


Posted in Python onMarch 03, 2021

几乎所有的Python 2程序都需要一些修改才能正常地运行在Python 3的环境下。为了简化这个转换过程,Python 3自带了一个叫做2to3的实用脚本(Utility Script),这个脚本会将你的Python 2程序源文件作为输入,然后自动将其转换到Python 3的形式。

本文介绍一下在windows 10 环境下如何使用这个工具:

1)首先要先安装好python3,可到官网下载https://www.python.org/

2)使用Windows 命令提示符(cmd)打开2to3.py 脚本所在位置,如下图:

C:\Users\CodeMing>cd C:\Program Files\Python 3.5\Tools\scripts

Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作

3)紧接着运行 2to3.py 脚本

C:\Program Files\Python 3.5\Tools\scripts>python 2to3.py

Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作

可以看见在python 2to3.py 后面是需要参数的,我们输入--help 可以看到所需的参数信息。

4)2to3.py 脚本可以单独转换python2.x 代码 到python3,也可以按照目录批量的转换。下面分别举例说明一下:

A 按目录转换

假设我要转换的代码所在目录在:E:\ipv6-master

那么在CMD里面输入:

C:\Program Files\Python 3.5\Tools\scripts>python 2to3.py -w E:\ipv6--master\

B 按指定代码转换

C:\Program Files\Python 3.5\Tools\scripts>python 2to3.py -w E:\ipv6--master\IPV6.py

已知问题:

1)当要转换的代码在C盘的路径下,转换会出问题。显示:拒绝访问。可能是权限问题。

补充:python中2to3工具的使用

python3与python2的还是有诸多的不同,比如说在2中:

print "Hello,World!"
raw_input()

在3里面就成了:

print ("Hello,World!")
input()

所以如果用的python2开发的项目要迁移到3中,就需要进行代码的转换。Python3中自带了个转换工具,下面用个最简单的例子来说说2to3转换工具。

例子:(2to3Test.py 里面只有print这行代码)

# python 2.7.6
# 2to3Test.py
 
print "Hello,World!"

用python27显然是可以编译的:

D:\Python>python27 2to3Test.py
Hello,World!

用python33就编译不过了,因为3里print是函数,这样写就会有语法错误。

D:\Python>python33 2to3Test.py
 File "2to3Test.py", line 1
  print "Hello,World!"
            ^
SyntaxError: invalid syntax

下面用python3中自带的2to3工具进行转换:

D:\Python>python C:\Python33\Tools\Scripts\2to3.py -w 2to3Test.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 2to3Test.py
--- 2to3Test.py (original)
+++ 2to3Test.py (refactored)
@@ -1 +1 @@
-print "Hello,World!"
+print("Hello,World!")
RefactoringTool: Files that were modified:
RefactoringTool: 2to3Test.py

最后用python33来进行编译,结果显示正确的。

D:\Python>python33 2to3Test.py
Hello,World!

总结

1. 目录. C:\Python33\Tools\Scripts\2to3.py. 其实在python2.6,2.7中都存在这个工具。

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

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

4. 不想要生成bak文件,再加上-n即可。 bak最好还是有。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Python 相关文章推荐
Python 时间处理datetime实例
Sep 06 Python
Python 功能和特点(新手必学)
Dec 30 Python
浅谈Python浅拷贝、深拷贝及引用机制
Dec 15 Python
基于python中pygame模块的Linux下安装过程(详解)
Nov 09 Python
Django 视图层(view)的使用
Nov 09 Python
Python设计模式之职责链模式原理与用法实例分析
Jan 11 Python
python爬虫简单的添加代理进行访问的实现代码
Apr 04 Python
Python调用Windows API函数编写录音机和音乐播放器功能
Jan 05 Python
Python3将ipa包中的文件按大小排序
Apr 17 Python
Python读取二进制文件代码方法解析
Jun 22 Python
只需要100行Python代码就可以实现的贪吃蛇小游戏
May 27 Python
Python可变与不可变数据和深拷贝与浅拷贝
Apr 06 Python
详解python第三方库的安装、PyInstaller库、random库
Mar 03 #Python
聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
Mar 03 #Python
对Pytorch 中的contiguous理解说明
Mar 03 #Python
Flask中jinja2的继承实现方法及实例
Mar 03 #Python
基于PyTorch中view的用法说明
Mar 03 #Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
Mar 03 #Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
Mar 03 #Python
You might like
基于PHP与XML的PDF文档生成技术
2006/10/09 PHP
php file_exists 检查文件或目录是否存在的函数
2010/05/10 PHP
PHP重定向的3种方式
2013/03/07 PHP
php权重计算方法代码分享
2014/01/09 PHP
ThinkPHP使用心得分享-分页类Page的用法
2014/05/15 PHP
php中get_defined_constants函数用法实例分析
2015/05/12 PHP
深入理解PHP之OpCode原理详解
2016/06/01 PHP
PHP join()函数用法与实例讲解
2019/03/11 PHP
实现laravel 插入操作日志到数据库的方法
2019/10/11 PHP
JavaScript的Function详细
2006/11/14 Javascript
addRule在firefox下的兼容写法
2006/11/30 Javascript
jQuery对象[0]是什么含义?
2010/07/31 Javascript
你必须知道的JavaScript 中字符串连接的性能的一些问题
2013/05/07 Javascript
jQuery实现仿微软首页感应鼠标变化滑动窗口效果
2015/10/08 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
2017/01/03 Javascript
Angular.js中ng-if、ng-show和ng-hide的区别介绍
2017/01/20 Javascript
video.js使用改变ui过程
2017/03/05 Javascript
angularjs $http实现form表单提交示例
2017/06/09 Javascript
JS面向对象的程序设计相关知识小结
2018/05/26 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
2019/03/07 Javascript
微信小程序遍历Echarts图表实现多个饼图
2019/04/25 Javascript
三步实现ionic3点击退出app程序
2019/09/17 Javascript
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python实现的一个p2p文件传输实例
2014/06/04 Python
Python基于动态规划算法解决01背包问题实例
2017/12/06 Python
python 对象和json互相转换方法
2018/03/22 Python
Python实现的redis分布式锁功能示例
2018/05/29 Python
Flask之请求钩子的实现
2018/12/23 Python
Python实现Event回调机制的方法
2019/02/13 Python
python 并发编程 多路复用IO模型详解
2019/08/20 Python
卖房协议书
2014/04/11 职场文书
协会周年庆活动方案
2014/08/26 职场文书
群众路线剖析材料范文
2014/10/09 职场文书
幼儿园学前班幼儿评语
2014/12/29 职场文书
安全主题班会教案
2015/08/12 职场文书
vite+vue3.0+ts+element-plus快速搭建项目的实现
2021/06/24 Vue.js