【问题标题】:loop over mulitple rrd files in directory遍历目录中的多个 rrd 文件
【发布时间】:2023-04-06 02:13:02
【问题描述】:

我需要遍历给定目录中的所有 .rrd 文件,并在每个 rrd 数据库中获取数据并执行一些操作并将它们导出到 python 脚本中的单个 csv 文件中!

如何以有效的方式做到这一点?可以建议我如何通过多个文件循环和访问数据库数据吗?

【问题讨论】:

  • 你在这里至少问了两个问题:如何循环文件(谷歌“glob”)以及如何读取和处理.rrd 文件(谷歌“rrd python”)。请做你的研究,然后一次要求一件事。
  • glob 通常不是在 python 中迭代文件的好方法。
  • 我可以从 rrd 文件中获取数据并导出到 csv 文件中。问题是有多个 rrd 文件,我想将它们全部导出到一个 csv 文件中。所以我不知道如何循环每个 rrd 文件并访问每个 rrd 文件!

标签: python export-to-csv cacti


【解决方案1】:

我假设您的系统上已经安装了带有 python 绑定的 rrdtool。如果不是,here 是安装说明。

然后,循环遍历给定目录中的.rrd 文件并执行提取:

import os
import rrdtool

target_directory = "some/directory/with/rrdfiles"
rrd_files = [os.path.join(target_directory, f) for f in os.listdir(target_directory) if f.endswith('.rrd')]
data_container = []
for rrd_file in rrd_files:
    data = rrdtool.fetch(rrd_file, 'AVERAGE'  # or whichever CF you need
        '--resolution', '200',                # for example
    )                                         # and any other settings you need
    data_container.append(data)

参数列表跟在rrdfetch之后。

一旦您在rrd_files 循环中获得了所需的任何数据,您应该将其累积到一个列表列表中,每个子列表是一行数据。将它们写入csv 就像这样简单:

import csv

# read the .rrd data as above into a 'data_container' variable

with open('my_data.csv', 'w', newline='') as csv_file:
    rrd_writer = csv.writer(file)
    for row in data_container:
        rrd_writer.writerow(row)

这应该概述您必须遵循的一般步骤,您可能需要根据您的情况调整它们(特别是 rrdfetch)。

【讨论】:

  • 好的,先生。我将尝试对此进行测试,感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2022-10-04
  • 2021-01-16
  • 1970-01-01
  • 2011-01-31
  • 2010-12-16
  • 2017-05-20
  • 2019-04-08
  • 2019-01-16
相关资源
最近更新 更多