2017年9月13日 星期三

[python] 徒手把自己的程式從 py2 改成 py3

# 1
想親身體會一下從 py2 升到 py3 會有多痛苦,決定把自己來一遍。遇到以下的事情,其實感覺還好。

# 2
我最常遇到的是 print 後面要加括號,用手動改久了真的很想用 regexp 之類的直接取代

# 3
urllib 被拆成幾個部份,我有用到的:

urllib.urlencode ---> urllib.parse.urlencode
urllib.urlopen ---> urllib.request.urlopen

# 4
文字編碼的問題會在幾個地方遇到

在檔案讀寫,改用 codecs 的 open 並指定 encoding。
urlopen,得到的內容要 decode(encoding)
csv.reader 改用 codecs 的 open 並指定 encoding。

# 5
dict1.keys() 回傳的東西不是單純的 list,所以沒辦法做到 dict1.keys().sort()。解決方法是 sorted(dict1.keys())

從這樣:
dict1.keys().sort()
變這樣:
sorted(dict1.keys())

# 6
sort 原先有 cmp function 的,現在只能 key function,兩者概念相差甚大。現在 py3 提供 wrapper 從 cmp function 轉成 key function。

從這樣:
sorted(cursor,key=cmpbyyear, reverse=True)
變這樣:
sorted(cursor,key=functools.cmp_to_key(cmpbyyear), reverse=True)

# 7
dict1.has_key('skey') 現在不能用,改成 'skey' in dict1

從這樣:
dict1.has_key('skey')
變這樣:
'skey' in dict1
# 8
map 現在回傳是個 map 物件,是一種 iter,如果沒有執行 iter 動作的話,就不會真的開動。最簡單的方法就是包一層 list。

從這樣:
map(func, seq)
變這樣:
list(map(func, seq))

沒有留言:

張貼留言