python - 写入 CSV 文件时如何从列表中选择合适的数据?

标签 python python-3.x

我正在编写一个脚本来对 Meraki API 进行 API 调用,并且需要将某些值写入 CSV 文件。鉴于所附的屏幕截图,我已经能够从列表中选择某些信息,但与“timeSeries”没有任何关系,因为它似乎是一个不同的子部分。

JSON

latency_measure = json.loads(session.get('https://api.meraki.com/api/v0/organizations/' + ORG_ID + '/uplinksLossAndLatency', headers=headers).text)
def latency_measure_info(latency_measure):
    csv_file1 = open(name + ' appliances -' + str(today) + '.csv', 'w', encoding='utf-8')
    fieldnames = ['Network', 'Serial', 'Uplink', 'Destination IP', 'Test 1 Date/Time', 'Test 1 Loss Percent', 'Test 1 Latency', 'Test 2 Date/Time', 'Test 2 Loss Percent', 'Test 2 Latency', 'Test 3 Date/Time', 'Test 3 Loss Percent', 'Test 3 Latency', 'Test 4 Date/Time', 'Test 4 Loss Percent', 'Test 4 Latency']
    writer = csv.DictWriter(csv_file1, fieldnames=fieldnames, restval='')
    writer.writeheader()
    for latency in latency_measure: 
        if (network_id in network_id_list): 
            network_name = get_network_name(latency['networkId'], networks)
writer.writerow({'Network': network_name, 'Serial': latency['serial'], 'Uplink': latency['uplink'], 'Destination IP': latency['ip'], 'Test 1 Loss Percent': latency['timeSeries'['lossPercent']], 'Test 1 Latency': latency['latencyMs'], 'Test 2 Date/Time': latency['ts'], 'Test 2 Loss Percent': latency['lossPercent'], 'Test 2 Latency': latency['latencyMs'], 'Test 3 Date/Time': latency['ts'], 'Test 3 Loss Percent': latency['lossPercent'], 'Test 3 Latency': latency['latencyMs'], 'Test 4 Date/Time': latency['ts'], 'Test 4 Loss Percent': latency['lossPercent'], 'Test 4 Latency': latency['latencyMS']})
csv_file1.close()

将行写入 CSV 文件时,我能够挑选出网络、串行、上行链路和目标 IP 数据,但一旦我到达 timeSeries,它就不会提取该信息,因为我不知道如何指定它。

最佳答案

执行json.loads(..)后,“timeSeries”将是dict列表

print(type(latency["timeSeries"]))      
# <class 'list'>

print(type(latency["timeSeries"][0]))
# <class 'dict'>

print(type(latency["timeSeries"][1]))
# <class 'dict'>

...

首先通过索引访问 list 中的每个元素,然后使用键访问 dict 的键值对。

latency["timeSeries"][0]["ts"]
latency["timeSeries"][0]["lossPercent"]
latency["timeSeries"][0]["latencyMs"]

# OR

timeSeries0 = latency["timeSeries"][0]
timeSeries0["ts"]
timeSeries0["lossPercent"]
timeSeries0["latencyMs"]

如果您事先知道它们有多少,您可以对所有索引([0][1],..)进行一一硬编码,或者您可以循环 timeSeries 列表的所有元素并构建您想要写入的 dict 值。

关于python - 写入 CSV 文件时如何从列表中选择合适的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55623272/

相关文章:

Python - 如何使用正则表达式分割字符串但保留包含分割分隔符的模式?

python - 同时计算 2 列的扩展平均值

python - 如何使用 python3 将 CIDR 转换为 IP 范围?

python - 用 BeautifulSoup 刮掉多页

python - 测试目录中的目录导致单元测试中出现导入错误

python - 使用 Python 构造函数时出错

Python - Tkinter( Canvas ) - 左上角像素丢失?

python - 使用csv文件作为输入在python中绘制直方图

python - 不同线条的多个 HoverTools( Bokeh )

python - 如何在discord.py中获取调用命令的人的姓名