解决redis与Python交互取出来的是bytes类型的问题


Posted in Python onJuly 16, 2020

基本代码

from redis import *

if __name__ == '__main__':
 sr = StrictRedis(host='localhost', port=6379, db=0)
 result=sr.set('name','python')
 print(result)

 result1 = sr.get('name')
 print(result1)

运行结果:

True

b'python'

这里我们存进去的是字符串类型的数据,取出来却是字节类型的,这是由于python3的与redis交互的驱动的问题,Python2取出来的就是字符串类型的。

为了得到字符串类型的数据,你可以每次取出来decode一下,但是太繁琐了,可以这样设置:

sr = StrictRedis(host='localhost', port=6379, db=0,decode_responses=True)

即在连接数据库的时候加上decode_responses=True即可

补充知识:python读并写入redis 使用pipline管道

日常开发中,我们总是需要将一些文件写入到缓存中。而读文件较快的方式就是python了,另外python提供了非常好用的api帮助我们连接redis。本例中将会用rediscluster包来连接redis集群,并使用pipeline管道插入文件

# encoding: utf-8
from rediscluster import StrictRedisCluster
import sys
import os
import datetime

# redis_nodes = [{"host": "10.80.23.175", "port": 7000},
#    {"host": "10.80.23.175", "port": 7001},
#    {"host": "10.80.24.175", "port": 7000},
#    {"host": "10.80.24.175", "port": 7001},
#    {"host": "10.80.25.175", "port": 7000},
#    {"host": "10.80.25.175", "port": 7001}
#    ]

def redis_cluster():
 
 redis_nodes = [{"host": "10.80.23.175", "port": 7000},
     {"host": "10.80.23.175", "port": 7001},
     {"host": "10.80.24.175", "port": 7000},
     {"host": "10.80.24.175", "port": 7001},
     {"host": "10.80.25.175", "port": 7000},
     {"host": "10.80.25.175", "port": 7001}
     ]
 try:
  redisconn = StrictRedisCluster(startup_nodes=redis_nodes,
          skip_full_coverage_check=True)
  return redisconn
 except Exception as e:
  print("Connect Error!")
  sys.exit(1)

def to_redis(redis_conn1, file_name):
 # file_name = "D:\data\logs\hippo.log"
 pipe = redis_conn1.pipeline()
 # pos = []
 index = 0
 count = 0
 with open(file_name, 'r') as file_to_read:
  while True:
   lines = file_to_read.readline()
   lines = lines.replace("\n", "")
   if not lines:
    break
    pass
   s = lines.split("\t")
   value = s[1]
   key = s[0]
   result = pipe.lpush(key, value)
   # print(file_name + s)
   index = index + 1
   if index > 5000:
    pipe.execute()
    index = 0
    count = count + 1
    print("execute insert! count is %d" % count)
   pass
  pass
 pipe.execute()

def read_file(path):
 if os.path.isfile(path):
  print("start execute file %s" % path)
  to_redis(path)
 else:
  for root, dirs, files in os.walk(path):
   # print('root_dir:', root) # 当前目录路径
   # print('sub_dirs:', dirs) # 当前路径下所有子目录
   print('files:', files) # 当前路径下所有非目录子文件
   for fileName in files:
    all_name = root + "/" + fileName
    print("start execute file %s" % all_name)
    to_redis(redis_conn, all_name)

start_time = datetime.datetime.now()
redis_conn = redis_cluster()

file_paths = sys.argv[1]
# 第一个参数是本文件 故去掉
#file_paths.pop[0]
#for file_name in file_paths:
#print(file_paths)
read_file(file_paths)
end_time = datetime.datetime.now()
print("use times is %d " % (end_time - start_time).seconds)

在使用的时候需要将要插入的文件以参数形式传入到命令中

例如,将 /data/a.log 插入到redis中

python RedisFIleToRedis.py /data/a.log

以上这篇解决redis与Python交互取出来的是bytes类型的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中将字典转换成其json字符串
Jul 16 Python
在IIS服务器上以CGI方式运行Python脚本的教程
Apr 25 Python
Python学习笔记整理3之输入输出、python eval函数
Dec 14 Python
Python中int()函数的用法浅析
Oct 17 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
Sep 13 Python
Python中staticmethod和classmethod的作用与区别
Oct 11 Python
Django urls.py重构及参数传递详解
Jul 23 Python
Python学习笔记之For循环用法详解
Aug 14 Python
基于keras中的回调函数用法说明
Jun 17 Python
python中温度单位转换的实例方法
Dec 27 Python
Python爬虫+Tkinter制作一个翻译软件的示例
Feb 20 Python
Python Selenium操作Cookie的实例方法
Feb 28 Python
Python 使用 PyQt5 开发的关机小工具分享
Jul 16 #Python
Python csv文件记录流程代码解析
Jul 16 #Python
Python 抓取数据存储到Redis中的操作
Jul 16 #Python
django filter过滤器实现显示某个类型指定字段不同值方式
Jul 16 #Python
解决python对齐错误的方法
Jul 16 #Python
Python爬虫实例——爬取美团美食数据
Jul 15 #Python
django Model层常用验证器及自定义验证器详解
Jul 15 #Python
You might like
php中使用websocket详解
2016/09/23 PHP
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
php实现图片压缩处理
2020/09/09 PHP
基于jquery的地址栏射击游戏代码
2011/03/10 Javascript
jquery 循环显示div的示例代码
2013/10/18 Javascript
jquery的ajax异步请求接收返回json数据实例
2014/06/16 Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
2015/12/16 Javascript
实例讲解javascript注册事件处理函数
2016/01/09 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
2016/02/25 Javascript
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
2016/07/01 Javascript
React中ES5与ES6写法的区别总结
2017/04/21 Javascript
基于hover的用法实例(推荐)
2017/07/04 Javascript
JS双向链表实现与使用方法示例(增加一个previous属性实现)
2019/01/31 Javascript
vue v-for 使用问题整理小结
2019/08/04 Javascript
基于jsbarcode 生成条形码并将生成的条码保存至本地+源码
2020/04/27 Javascript
[33:23]Secret vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python中staticmethod和classmethod的作用与区别
2018/10/11 Python
Mac下Anaconda的安装和使用教程
2018/11/29 Python
5分钟 Pipenv 上手指南
2018/12/20 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
2019/06/10 Python
pyspark 随机森林的实现
2020/04/24 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
2020/05/22 Python
Python爬虫过程解析之多线程获取小米应用商店数据
2020/11/14 Python
HTML5之SVG 2D入门8—文档结构及相关元素总结
2013/01/30 HTML / CSS
HTML5 Canvas的性能提高技巧经验分享
2013/07/02 HTML / CSS
泰国的头号网上婴儿用品店:Motherhood.co.th
2019/04/09 全球购物
SQL数据库笔试题
2016/03/08 面试题
几个常见的软件测试问题
2016/09/07 面试题
质检部职责
2013/12/28 职场文书
护士进修自我鉴定
2014/02/07 职场文书
《恐龙》教学反思
2014/04/27 职场文书
社区清明节活动总结
2014/07/04 职场文书
新郎新娘答谢词
2015/01/04 职场文书
我的暑假生活作文(五年级)范文
2019/08/07 职场文书
Python中使用ipython的详细教程
2021/06/22 Python
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python