json里的递归遍历字典

本文介绍了如何使用Python的json模块从json1.txt文件中加载字典,通过递归函数get_value(d, 'data')查找包含特定键的键值对。同时,展示了如何使用pickle模块读取二进制文件中的元素类型,以及搜索指定大小文件的函数search_file()的应用。
摘要由CSDN通过智能技术生成
  1. 题目一

题目描述:

"""1. 使用json模块从文件json1.txt中load一个字典到d中。写一个递归函数get_value(d, ks),

打印d的所有层次中键为字符串且包含ks的键值对。调用get_value(d, ‘data’)。"""

import json
#在下面写自己的程序
key_list=[]
def get_value(d,ks):
    if isinstance(d,dict):
        for key in d.keys():
            if isinstance(d[key],(dict,list)):
                get_value(d[key],ks)
            if ks in key:
                key_list.append({key:d[key]})
        return key_list
    elif isinstance(d,list):
        for l in d:
            if isinstance(l,(dict,list)):  
                get_value(l,ks)
    for i in key_list:
        print(i)            
    
with open("json1.txt","r" ) as load_f:
    d=json.load(load_f)
    
    
    
#在上面写自己的程序
get_value(d, 'data')

注意:这里面的字典包含列表,列表有包含字典

txt文件如下所示:

{"web-app": {
  "servlet": [   
    {
      "servlet-name": "cofaxCDS",
      "servlet-class": "org.cofax.cds.CDSServlet",
      "init-param": {
        "configGlossary:installationAt": "Philadelphia, PA",
        "configGlossary:adminEmail": "ksm@pobox.com",
        "configGlossary:poweredBy": "Cofax",
        "configGlossary:poweredByIcon": "/images/cofax.gif",
        "configGlossary:staticPath": "/content/static",
        "templateProcessorClass": "org.cofax.WysiwygTemplate",
        "templateLoaderClass": "org.cofax.FilesTemplateLoader",
        "templatePath": "templates",
        "templateOverridePath": "",
        "defaultListTemplate": "listTemplate.htm",
        "defaultFileTemplate": "articleTemplate.htm",
        "useJSP": false,
        "jspListTemplate": "listTemplate.jsp",
        "jspFileTemplate": "articleTemplate.jsp",
        "cachePackageTagsTrack": 200,
        "cachePackageTagsStore": 200,
        "cachePackageTagsRefresh": 60,
        "cacheTemplatesTrack": 100,
        "cacheTemplatesStore": 50,
        "cacheTemplatesRefresh": 15,
        "cachePagesTrack": 200,
        "cachePagesStore": 100,
        "cachePagesRefresh": 10,
        "cachePagesDirtyRead": 10,
        "searchEngineListTemplate": "forSearchEnginesList.htm",
        "searchEngineFileTemplate": "forSearchEngines.htm",
        "searchEngineRobotsDb": "WEB-INF/robots.db",
        "useDataStore": true,
        "dataStoreClass": "org.cofax.SqlDataStore",
        "redirectionClass": "org.cofax.SqlRedirection",
        "dataStoreName": "cofax",
        "dataStoreDriver": "com.microsoft.jdbc.sqlserver.SQLServerDriver",
        "dataStoreUrl": "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon",
        "dataStoreUser": "sa",
        "dataStorePassword": "dataStoreTestQuery",
        "dataStoreTestQuery": "SET NOCOUNT ON;select test='test';",
        "dataStoreLogFile": "/usr/local/tomcat/logs/datastore.log",
        "dataStoreInitConns": 10,
        "dataStoreMaxConns": 100,
        "dataStoreConnUsageLimit": 100,
        "dataStoreLogLevel": "debug",
        "maxUrlLength": 500}},
    {
      "servlet-name": "cofaxEmail",
      "servlet-class": "org.cofax.cds.EmailServlet",
      "init-param": {
      "mailHost": "mail1",
      "mailHostOverride": "mail2"}},
    {
      "servlet-name": "cofaxAdmin",
      "servlet-class": "org.cofax.cds.AdminServlet"},
 
    {
      "servlet-name": "fileServlet",
      "servlet-class": "org.cofax.cds.FileServlet"},
    {
      "servlet-name": "cofaxTools",
      "servlet-class": "org.cofax.cms.CofaxToolsServlet",
      "init-param": {
        "templatePath": "toolstemplates/",
        "log": 1,
        "logLocation": "/usr/local/tomcat/logs/CofaxTools.log",
        "logMaxSize": "",
        "dataLog": 1,
        "dataLogLocation": "/usr/local/tomcat/logs/dataLog.log",
        "dataLogMaxSize": "",
        "removePageCache": "/content/admin/remove?cache=pages&id=",
        "removeTemplateCache": "/content/admin/remove?cache=templates&id=",
        "fileTransferFolder": "/usr/local/tomcat/webapps/content/fileTransferFolder",
        "lookInContext": 1,
        "adminGroupID": 4,
        "betaServer": true}}],
  "servlet-mapping": {
    "cofaxCDS": "/",
    "cofaxEmail": "/cofaxutil/aemail/*",
    "cofaxAdmin": "/admin/*",
    "fileServlet": "/static/*",
    "cofaxTools": "/tools/*"},
 
  "taglib": {
    "taglib-uri": "cofax.tld",
    "taglib-location": "/WEB-INF/tlds/cofax.tld"}}}

        2.题目二

问题描述:"""使用pickle模块从二进制文件hw9.dat中load一个列表到a中,打印a中类型为元组和集合的元素。"""

import pickle
#在下面写自己的程序
with open('hw9.dat','rb') as dat:
    a=pickle.load(dat)
    for i in a:
        if isinstance(i,(set,tuple)):
            print(i)
#在上面写自己的程序

        3.题目三

"""编写函数search_file(directory, lb, ub)搜索文件夹directory所有层次中大小在lb到ub之间的文件,

将文件的完整路径打印出来。lb和ub以字节为单位,并调用search_file(‘D:\\Python36’, 1024, 2048)。

(第一个参数为大家自己安装的Python的目录)

"""

import os
#在下面写自己的程序
def search_file(directory, lb, ub):
    for curDir, dirs, files in os.walk(directory):
        for file in files:
            filesize=os.path.getsize(os.path.join(curDir, file))
            if filesize>=lb and filesize <=ub:
                print(os.path.join(curDir, file))

search_file('C:\\Users\\什么时候更新\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Python 3.9', 1024, 2048)
#在上面写自己的程序

 主要是题目一找了整个csdn甚至google都没有我想要的,于是自己写了一个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值