python2.7与3.7脚本转换_python 2.7 - python 3.7 升级记录

更换的模块

python 3.7 模块名

python 2.7 模块名

python 3.7 包

python 2.7包

pymysql

MySQLdb

PyMySQL

MySQL-python

pdfminer

pdfminer

pdfminer.six

pdfminer

urllib.parse

urlparse

自带

自带

html

HTMLParser

自带

HTMLparser

语法变化

1. print 修改为 print()

2. except Exception, e 修改为 except Exception as e

3. import 相对路径导入

python3.7 模块A import 同一目录下的模块B时,需要显式使用from . import

场景实验:

绝对路径~/test/有python文件main.py和文件夹work,work里有两个文件a.py, b.py,如下所示:

|-main.py

|-work

----|-a.py

----|-b.py

其中a.py 的内容:

import b

print ("import a")

b.py的内容

print ("import b")

main.py的内容

from work import a

print "main"

执行 python main.py 后报错:

traceback (most recent call last):

File "main.py", line 1, in

from work import a

File "/home/wangding/test/work/a.py", line 2, in

import b

ModuleNotFoundError: No module named 'b'

将a.py 的import语句修改为

from . import b

执行Python main.py后成功输出

import b

import a

main

4. 字典dict 取消了has_key()方法,使用 ”key in dict“语法代替

meta = {"a": 123}

if "a" in meta: # python 2.7 语法if meta.has_key("a"):

print True

5. 字符编码问题

1)redis

以默认参数创建StrictRedis实例,

Python2: 写入unicode/str,读回均为str

Python3:写入str/bytes,读回均为bytes

建议StrictRedis初始化时设置参数decode_responses=True,读回的结果在python2下均为unicode,在python3下均为str,返回的结果均按照字符串来进行后续操作

python2的 str和unicode类型均可以按照字符串操作,很多场景下会混淆使用。python3的str和bytes类型区分更加严格,避免了之前的歧义。

2)json,base64

python2 json序列化支持unicode和str类型; python3 json序列化只支持str类型,不支持bytes类型。

python2 base64编码默认生成str类型;python3 base64编码默认生成bytes类型。

因此,python2版本下语句

import base64, json

img = open(img_file, "rb").read() # 读取一副图片

meta = {"data": base64.b64encode(img)} # 生成字典

json.dumps(meta) #将字典序列化(常用于POST远程服务)

在python3 版本中会出错,原因是meta['data']是bytes类型,不能被json序列化。python3 需要将b64encode输出再次转码为str

import base64, json

img = open(img_file, "rb").read()

meta = {"data": base64.b64encode(img).decode()} # 调用decode()转为str类型的base64码

json.dumps(meta)

3) hashlib计算md5

python2 支持对unicode和str类型计算md5;

python3 只支持对bytes类型计算md5

6. 内置map(),filter()函数

python2 返回列表

python3 返回迭代器

在python2中经常使用map()和lambda函数来代替for循环操作,比如

map(lambda x: x.start(), processes) # 将processes中的所有进程对象启动

在python3中由于迭代器具有惰性计算的性质,上述语句在python3中不会启动进程,直到有访问迭代器对象的操作出现。如:

list(map(lambda x: x.start(), processes)) # 将map()转换为list,触发lambda函数执行,进程启动

7. dict.keys()

python2 返回列表

python3 返回迭代器

8. dict 迭代过程中禁止增减成员

如下代码,在字典迭代过程中试图删除某成员

a= dict(zip(range(10),range(10)))

for k in a.keys():

if k == 5:

a.pop(k)

在python2中可以执行,结果为

>>>print a

Out[5]: {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 6: 6, 7: 7, 8: 8, 9: 9}

在python3中运行报错:

RuntimeError Traceback (most recent call last)

in ()

----> 1 for k in a.keys():

2 if k == 5:

3 a.pop(k)

4

RuntimeError: dictionary changed size during iteration

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533986.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

远程过程调用失败_Java开发大型互联网RPC远程调用服务实现之问题处理方案

引言RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络…

chrome 新的session 设置_为什么还是由这么多人搞不懂Cookie、Session、Token?

作者:不学无数的程序员链接:https://urlify.cn/Yfm6Vr# Cookie洛:大爷,楼上322住的是马冬梅家吧? 大爷:马都什么? 夏洛:马冬梅。 7大爷:什么都没啊? 夏洛…

mysql for update用处_for update的作用和用法

一、for update定义for update是一种行级锁,又叫排它锁,一旦用户对某个行施加了行级加锁,则该用户可以查询也可以更新被加锁的数据行,其它用户只能查询但不能更新被加锁的数据行.如果其它用户想更新该表中的数据行&…

python大数据零基础_零基础学习大数据人工智能,学习路线篇!

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经成为了语言排行第一名。从学习难易度来看…

python删除文件和linux删除文件区别_使用Python批量删除文件列表

使用Python批量删除文件列表环境:已知要删除的文件列表,即确定哪些文件要删除。代码如下:#!/usr/bin/env python#codingutf-8#目的:本程序主要为删除给定的文件列表import osimport shutil#引入模块,os为包含普遍的操作…

华为python有必要学吗_【华为云技术分享】这个 Python 库有必要好好学学

这里看一个最基本的例子,这里给到一个 User 的 Class 定义,再给到一个 data 数据,像这样:1 class User(object):2 def __init__(self, name, age):3 self.name name4 self.age age56 data [{7 name: Germey,8 age: 239 }, {10 nam…

python求平行四边形面积_python 已知平行四边形三个点,求第四个点的案例

我就废话不多说了,大家还是直接看代码吧!import numpy as np#已知平行四边形三个点,求第四个点#计算两点之间的距离def CalcEuclideanDistance(point1,point2):vec1 np.array(point1)vec2 np.array(point2)distance np.linalg.norm(vec1 -…

eview面板数据之混合回归模型_【视频教程】Eviews系列25|面板数据回归分析之Hausman检验及本章常见问题解答...

点击上方关注我们!本期我们学习Eviews统计建模最后一部分--面板数据回归分析Hausman检验及本章常见问题解答。实操:Hausman检验判断是固定效应模型还是随机效应模型上期我们讲到模型判断若选择模型2,需进一步通过Hausman检验判断固定效应还是随机效应,接…

python打出由边框包围的_python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)...

图像边框的实现图像边框设计的主要函数cv.copyMakeBorder()——实现边框填充主要参数如下:参数一:源图像——如:读取的img参数二——参数五分别是:上下左右边的宽度——单位:像素参数六:边框类型&#xff1…

mysql5.7.21备份脚本_Shell脚本使用汇总整理——mysql数据库5.7.8以后备份脚本

#!/bin/sh#db_backups_conf.txt文件路径db_backups_conf"/wocloud/shell/db_backups_conf.txt"#判断文件是否存在if [ -f "${db_backups_conf}" ];thenecho $(date %Y-%m-%d %H:%M:%S)" 数据库配置信息文件存在,开始进行数据备份"#获…

python嵌套列表操作_python基础(list列表的操作,公共方法,列表嵌套,元祖)...

list 列表索引,切片与str相同。列表的操作(增删改查)1,增加.append()  追加,增加到最后li [alex,wusir,egon,女神,taibai]li.append(ppp)print(li).insert()  中间插入,通过索引li [alex,wusir,egon,女神,taibai]li.insert(…

mybatis mysql selectkey_Mybatis示例之SelectKey的应用

SelectKey在Mybatis中是为了解决Insert数据时不支持主键自动生成的问题,他可以很随意的设置生成主键的方式。不管SelectKey有多好,尽量不要遇到这种情况吧,毕竟很麻烦。SelectKey需要注意order属性,像Mysql一类支持自动增长类型的…

python程序设计上机实践第三章答案_20192419 实验三《Python程序设计》实验报告

学号 2019-2020-2 《Python程序设计》实验3报告课程:《Python程序设计》班级:1924姓名: 万腾阳学号:20192419实验教师:王志强实验日期:2020年5月16日必修/选修: 公选课1.实验内容创建服务端和客…

完成数独的算法 python_python实现数独算法实例

本文实例讲述了python实现数独算法的方法。分享给大家供大家参考。具体如下:# -*- coding: utf-8 -*-Created on 2012-10-5author: Administratorfrom collections import defaultdictimport itertoolsa [[ 0, 7, 0, 0, 0, 0, 0, 0, 0], #0[ 5, 0, 3, 0, 0, 6, 0, …

python读取多个文件csv_Python:读取多个文本文件并写入相应的csv文件

我在别处找不到这个问题的答案,所以我将继续把它贴在这里:我有一个Python脚本,它将读取文本文件的内容,将其内容拆分为单词,然后输出一个CSV文件,该文件将文本缩减为单词频率列表。(最后,我将插…

java treetable_在Swing中创建TreeTable | 学步园

TreeTable是Tree和Table的一个结合-就是一个即能够展开和收起行,同时也能够显示多个列的组件。在Swing的标准包里没有一个叫做JtreeTable的组件,但是我们很容易通过把Jtree做成Jtable的渲染器来创建一个这样的组件。这篇文章就是关于如何使用…

python爬去微博十大流行语_用python重新定义【2019十大网络流行语】-后台/架构/数据库-敏捷大拇指-一个敢保留真话的IT精英社区...

↑关注 置顶 ~ 有趣的不像个技术号52568040f9313098ffa367d9d9d21437.jpg (5.73 KB, 下载次数: 0)2019-12-10 04:43 上传3f4d5fe0016d011a7a68af763314befd.jpg (1.06 KB, 下载次数: 0)2019-12-10 04:43 上传“文明互鉴真硬核,融梗柠檬谁觉得。霸凌第一九九六&…

java中怎么获取配置文件的值_java如何获取配置文件的值

转:原创 编码小王子 发布于2018-10-11 18:07:52 阅读数 2722 收藏展开java大型项目中都会很多系统常量,比如说数据库的账号和密码,以及各种token值等,都需要统一的管理,如果零落的散布到各个类等具体的代码中的话,在后期管理上将是一场灾难,所有需要对这些变量进行统…

python实现队列_用Python实现的数据结构与算法:队列

一、概述队列(Queue)是一种先进先出(FIFO)的线性数据结构,插入操作在队尾(rear)进行,删除操作在队首(front)进行。二、ADT队列ADT(抽象数据类型)一般提供以下接口:Queue() 创建队列enqueue(item) 向队尾插入项dequeue() 返回队首的项&#xf…

java 监听窗口是否改变_JAVA项目监听文件是否发生变化

一.spring容器都初始化完成之后做操作packagecom.bijian.study.listener;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.context.ApplicationListener;importorg.springframework.context.event.ContextRefreshedEvent;importorg.s…