1. 程式人生 > >python練習冊第三題

python練習冊第三題

題目

將 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

,相關的查詢操作都是在這個key上。

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()