【问题标题】:Python looping through files and saving content to dictPython循环文件并将内容保存到dict
【发布时间】:2020-10-14 14:20:43
【问题描述】:

我有以下代码:

import os
import json
import ipaddress

iplist = []
ipiflist = []
mydict = {}

for filename in os.listdir('data/'):
    with open(os.path.join('data/', filename), 'r') as f:
        data = json.load(f)
        mydict.update(data)
        print(mydict)

在数据目录中有几个我在这个循环中打开的 JSON 文件。

我在每个循环中更新字典,因此我得到以下输出:

{'ipif_1001': '10.10.160.129', 'ipif_1002': '10.10.160.142', 'ipif_1003': '10.10.160.169', 'ipif_1004': '10.10.160.173', 'ipif_3334': '10.10.160.194', 'IpIf3337': '10.10.160.126'}
{'ipif_1001': '10.10.160.129', 'ipif_1002': '10.10.160.142', 'ipif_1003': '10.10.160.170', 'ipif_1004': '10.10.160.174', 'ipif_3334': '10.10.160.194', 'IpIf3337': '10.10.160.126', 'ipif_1005': '10.10.160.178', 'ipif_1006': '10.10.160.182'}
{'ipif_1001': '10.10.160.129', 'ipif_1002': '10.10.160.142', 'ipif_1003': '10.10.160.170', 'ipif_1004': '10.10.160.174', 'ipif_3334': '10.10.160.194', 'IpIf3337': '10.10.160.126', 'ipif_1005': '10.10.160.178', 'ipif_1006': '10.10.160.182', 'IpIf1001': '10.10.160.138', 'IpIf1002': '10.10.160.141', 'IpIf1003': '10.10.160.153', 'IpIf1006': '10.10.160.181', 'IpIf_CPEDCN': '10.10.160.241', 'IpIf_DCNMgt': '10.10.191.253', 'ipif1164': '10.10.160.166', 'IpIf1010': '10.10.170.1'}

我只需要最后一个循环的汇总输出。我如何才能访问它?

感谢您的帮助

【问题讨论】:

  • 那么,预期的输出是什么?
  • 我认为他的意思是他只想要他输出的最后一行代码 - 只需将 print(mydict) 放在 for 循环之外

标签: python json loops dictionary


【解决方案1】:
import os
import json
import ipaddress

iplist = []
ipiflist = []
mydict = {}
list = os.listdir('data/')

for filename in os.listdir('data/'):
    with open(os.path.join('data/', filename), 'r') as f:
        data = json.load(f)
        if list[list.count-1] == filename: #check last filename in the directory with the current filename in the loop
            mydict.update(data)
        print(mydict)

这样试试

【讨论】:

    【解决方案2】:

    python中的for循环有一个else语句,只有在循环成功时才会执行。因此,您可以在那里绘制最后的结果?

    for filename in os.listdir('data/'):
        with open(os.path.join('data/', filename), 'r') as f:
            data = json.load(f)
            mydict.update(data)
    else:
        print(mydict)
    

    【讨论】:

    • 我刚刚注意到这会删除字典中的重复键有没有办法防止这种情况发生?
    • 字典中的键总是唯一的。 (字典中不能有 2 个具有相同名称的键 | 对象)。一个可能的解决方案是将您的值存储到列表中。比如:mydict.setdefault('code', []).append(ip_address) 但是你必须运行json for code, ip_address in data.items():
    猜你喜欢
    • 2019-04-09
    • 2022-01-13
    • 1970-01-01
    • 2020-07-17
    • 2020-05-08
    • 2019-03-04
    • 2018-11-04
    • 1970-01-01
    • 2013-05-05
    相关资源
    最近更新 更多