#!/usr/bin/env python# coding=utf-8import sysreload(sys)sys.setdefaultencoding('utf8')import jsonimport requestsfrom chardet import detectfalse = Falsenull = ""true = True#from werobot import clientfile_path = 'data1.json'with open(file_path) as f: js = f.read()dic = eval(js)def ana(month): i = len(dic["items"])-1 st = "" while i > 0: #print dic["items"][i]["name"] if st.find(dic["items"][i]["name"]) == -1: #print st.find(dic["items"][194]["name"]) st = st + dic["items"][i]["properties"]["lastModifiedDate"][0:4].replace("/",".")+" " + dic["items"][i]["name"] +str(i)+"\n" i = i - 1 i = i - 1 return st all_data = ana("7")print all_datast.find(dic [“ items”] [194] [“ name”])= -1但它不能通过if条件:st.find(dic [“ items”] [i] [“ name”])== -1data1.json在要点上:data1.json在要点上该代码有什么问题吗?
1 回答

慕莱坞森
TA贡献1810条经验 获得超4个赞
您递减i两次:一次在if语句中,一次在while循环中。因此,当if语句的计算结果为时True,i将2总共减少,您将跳过的一些值i。
快速测试表明确实i == 194可以跳过:i从跳转195到193。因此,您提及的特定比较不会被评估,因为i永远不会被评估194。
这很容易评估和调试自己:只需print(i)在每个循环中使用,就在if语句之前,然后看看它是如何变化的。
另外,您声明您的输入是字典。实际上,它是一个完全有效的JSON文件,您可以(应该)按以下方式读取它:
import json
with open(sys.argv[1]) as f:
dic = json.load(f)
无需使用eval,无需使用false = False; null = ""; true = True。这些行只会造成混乱和(严重)错误,应将其删除。请注意,顺便说一下,null(JSON)是None在Python中转换的,而不是""(空字符串)。
添加回答
举报
0/150
提交
取消