#!/usr/bin/env python
# coding=utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import json
import requests
from chardet import detect
false = False
null = ""
true = True
#from werobot import client
file_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_data
st.find(dic [“ items”] [194] [“ name”])= -1
但它不能通过if条件:
st.find(dic [“ items”] [i] [“ name”])== -1
data1.json的要旨是:data1.json on gist
此代码有什么问题吗?
答案 0 :(得分:0)
您要递减两次i
:一次在if语句中,一次在while
循环中。因此,如果if语句的值为True
,则i
总共将减少2
,并且您将跳过i
的某些值。
一项快速测试表明,实际上i == 194
被跳过了:i
从195
跳到了193
。因此,您提到的特定比较永远不会得到评估,因为i
永远不会194
。
这很容易评估和调试自己:只需在if语句之前的每个循环中使用print(i)
,然后看看它是如何变化的。
此外,您声明您的输入是字典。实际上,它是一个完全有效的JSON文件,您可以(应该)按以下方式读取它:
import json
with open(sys.argv[1]) as f:
dic = json.load(f)
无需使用eval
,无需使用false = False; null = ""; true = True
。这些行只会造成混乱和(严重)错误,应删除。请注意,顺便说一下,null
(JSON)在Python中转换为None
,而不是""
(空字符串)。