python練習冊第三題
阿新 • • 發佈:2018-11-26
題目
將 0001 題生成的 200 個啟用碼(或者優惠券)儲存到 Redis 非關係型資料庫中。
解題思路
難點是壓根不知道redis怎麼用。好在找到了一些文章快速學了些:
使用python操作redis
python: redis介紹及簡單應用
python(十一)下:Redis安裝配置及使用詳解
安裝redis
包,就可以開始用了。
解決程式碼
mport redis import base64 import re # 查詢 def query(r, name, key): return r.hget(name=name, key=key) if __name__ == '__main__': dict = {} r = redis.Redis(host='127.0.0.1', port=6379, db=0) with open('coupon.txt', 'r') as fp: for line in fp.readlines(): s = base64.urlsafe_b64decode(line.encode('utf-8')) id = re.findall(r'.*/.*:(.*)\'', str(s)) r.hset(name='coupon', key=line.strip(), value=id)
redis雜湊儲存可以用下表表示,這是從別人部落格抄過來的:
name hash
|````````````|
n1 --------> | k1 --> v1 |
| k2 --> v2 |
|____________|
|````````````|
n2 --------> | k7 --> v7 |
|____________|
這樣子儲存後在redis中只有一個key就是coupon
redis相關操作記錄
切換db:select+n
清除快取:`flushdb' or 'flushall'
別人的程式碼
PS: 大同小異,竊喜
import redis import base64 import re def make_connect(): r = redis.Redis(host='127.0.0.1', port=6379, db=1) return r def parse_coupon(c_code): return base64.urlsafe_b64decode(c_code.encode('utf-8')) def upload_to_database(): session = make_connect() with open('coupon.txt', 'r') as file: for line in file.readlines(): c_id = re.findall(r'.*/.*:(.*)\'', str(parse_coupon(line))) session.set(c_id.pop(), line.strip()) if __name__ == '__main__': upload_to_database()