linux中python操作redis读取数据写入文件

2023-10-27

编写python脚本:扫描redis中终端在线集合和查询终端状态表。

在redis中,终端在线集合是有序集合存储方式,成员是终端状态表名。终端状态表以hash方式存储,是一个string类型的field和value的映射表。

1、脚本第一行是指出代码用什么可执行程序运行。在此之前,我一般使用:

#!/usr/bin/python(路径使用which python查找)

看到公司开发人员脚本使用的是:

#!/usr/bin/env python

稍有疑惑,百度之后推荐使用第二种方法。优点是,该方法到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 = 'zd_online.txt'
filename2 = 'zd_zdtus.txt'
#将查询到的所有在线终端结果存在文件中,以行分开
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 = file_object1.readlines()
    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 = file_object1.readlines()
    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 > zd_online.txt
while read myline
do
  echo $myline >> zd_zdtus.txt
  redis-cli -h 127.0.0.1 -p 1000 hgetall $myline >> zd_zdtus.txt
done < zd_online.txt

知识总结:

1、python操作redis方法

2、python读取写入文件方法

3、列表、字典遍历

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux中python操作redis读取数据写入文件 的相关文章

随机推荐