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()
posted @ 2018-11-26 00:43  Wunsam_Chan  阅读(192)  评论(0编辑  收藏  举报