linux中python操作redis读取数据写⼊⽂件
编写python脚本:扫描redis中终端在线集合和查询终端状态表。
在redis中,终端在线集合是有序集合存储⽅式,成员是终端状态表名。终端状态表以hash⽅式存储,是⼀个string类型的field和value的映射表。
1、脚本第⼀⾏是指出代码⽤什么可执⾏程序运⾏。在此之前,我⼀般使⽤:
#!/usr/bin/python(路径使⽤which python查)
看到公司开发⼈员脚本使⽤的是:
#!/usr/bin/env python
python怎么读取json文件稍有疑惑,百度之后推荐使⽤第⼆种⽅法。优点是,该⽅法到env中寻python的安装路径,再调⽤对应路径下的解释器程序完成操作。路径不是写死的,可移植性⾼。
2、编写脚本如下
#!/usr/bin/env python
#coding=utf-8
#扫描终端在线集合和查询终端状态表
import redis
import json
#连接redis
r = redis.Redis(host='127.0.0.1', port=1000, db=0)
#查询终端在线集合中所有的在线终端
zd_onlines = r.zrange('zset_zd_online',0,-1)
#print(zd_onlines)
#新建⽂件,⽤来保存在线终端和终端状态表结果
filename1 = ''
filename2 = ''
#将查询到的所有在线终端结果存在⽂件中,以⾏分开
with open(filename1,'w') as file_object1:
for zd_online in zd_onlines:
#print(zd_online)
file_object1.write(zd_online)
file_object1.write("\n")
#以⾏读取在线终端
with open(filename1) as file_object1:
zds = adlines()
for zd in zds:
zd = zd.strip('\n')
#print(zd)
#查询在线终端状态表
zd_zdtus = r.hgetall(zd)
zd_zdtuss = []
zd_zdtuss.append(zd_zdtus)
#print(zd_zdtuss)
#将查询的终端状态存在⽂件filename2中
with open(filename2,'a') as file_object2:
json.dump(obj=zd_zdtuss, fp=file_object2)
file_object2.write("\n")
第⼀次写⽂件filename1的数据是从redis查询到的终端在线集合,该数据是下⼀步需要使⽤的终端状态表。为了下⼀步使⽤⽅便,使⽤了分⾏存储。再将filename1的数据使⽤readlines()⽅法,将所有⾏数据读取出来,因为默认每次读取会添加空⾏,使⽤strip('\n'),除去多余空⾏。使⽤for循环,每读取⼀⾏数据(⼀个终端状态表名)就查询其对应的终端状态表数据。
定义⼀个空列表,⽤来存放查询到的终端状态数据。使⽤append()⽅法,将在redis中查询的终端数据依次添加到定义的空列表中。
第⼆次写⽂件filename2,终端状态表数据格式读取出来是dict,将终端状态表的数据使⽤json.dump()函数转换成json信息写⼊⽂件,并且每个终端状态表数据之间使⽤空⾏隔开。具体使⽤什么⽅法可以根据实际需求确定。
也可以使⽤for循环直接遍历dict,不需要定义列表。
with open(filename1) as file_object1:
zds = adlines()
for zd in zds:
zd = zd.strip('\n')
zd_zdtus = r.hgetall(zd)
with open(filename2,'a') as file_object2:
for k,v in zd_zdtus.items():
a = k + ":" + v
file_object2.write(a)
file_object2.write("\n")
这个脚本使⽤shell编写的话,更加简单:
#!/bin/bash
redis-cli -h 127.0.0.1 -p 1000 zrange zset_zd_online 0 -1 >
while read myline
do
echo $myline >>
redis-cli -h 127.0.0.1 -p 1000 hgetall $myline >>
done <
知识总结:
1、python操作redis⽅法
2、python读取写⼊⽂件⽅法
3、列表、字典遍历

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。