Python一些好玩的方法

NullSpider發表於2017-11-27

開頭嘮叨兩句

有啥好玩的方法可以告訴我,積累一些小程式碼斷

  • Author: Leo
  • Wechat: Leo-sunhailin
  • QQ: 379978424
  • E-mail: 379978424@qq.com

現在有12345五個東西,求分成2,3,4,5組的全排列總和,且每組每個方法不能重複。

# 320種
for i in range(2, 6):
    for j in itertools.permutations('12345', i):
        print([int(x) for x in j])複製程式碼

一般網頁請求json資料返回的json到了Python中會變為字典形式,但是Python(3.6還是3.5之前)的字典是無序的,如果業務需求要有序的話,只要做如下修改:

from collection import OrderedDict

# url是目標地址
result = urllib.request.urlopen(url).read().decode("UTF-8")
# 主要就是object_pairs_hook這塊引用OrderedDict.
json_result = json.loads(result, object_pairs_hook=OrderedDict)

# 這樣返回的json字典就是有序的複製程式碼

如果你的MongoDB資料庫中存了類似於這樣的資料 LUUID("e5e1c8ee-cb58-11e7-a088-f82819e1bcfa"), 實際上就UUID型別的資料,這時候改怎麼讀取回來之後查詢呢?

官方文件: 官方文件

在講如何查詢之前先說明一下查詢回來的結果只有 e5e1c8ee-cb58-11e7-a088-f82819e1bcfa 這一段,而且不能用

  • find({"xxx": "e5e1c8ee-cb58-11e7-a088-f82819e1bcfa"})

或者

  • find({"xxx": "LUUID("e5e1c8ee-cb58-11e7-a088-f82819e1bcfa")"})

結果都是無法查詢到的

接下來先要明白的是MongoDB實際上儲存的是一種叫做bson的類json資料格式(可以互換).所以方向有了接下來就是查詢BSON裡面對於UUID的定義了.

# 一般查全部返回的時候資料str型別的uuid,這時候無法直接回查,需要轉換資料格式
# 引入兩個包

from bson import UUIDLegacy
from bson.binary import UUID

# 例如你的uuid是e5e1c8ee-cb58-11e7-a088-f82819e1bcfa, 填進去返回的就是一個bson支援的UUID型別的資料
query = {"xxx": UUIDLegacy(UUID(<你的字串型別的uuid>))}

# 如果你輸出query就會發現會是下面這樣子的
# {"xxx": UUIDLegacy('<你的UUID>')}

# 剩下就是查詢語句而已了
conn = ...
db = conn[<表名>]
col = db[<集合名>]
col.find(query)
...


# 如果前提自己不會操作這些UUID的就在儲存之前直接寫入一個str的uuid。
# 我當時就沒有意思資料型別帶來的問題,以為MongoDB會變成字串.
# 不過這也有收穫,知道bson還支援UUID這種資料型別複製程式碼

相關文章