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.pswp.cn/news/533986.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533986.shtml
英文地址,請注明出處:http://en.pswp.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…