我有一个不断变化的json文件,有直播的用户/观看者加入和离开。我想将当前正在查看的所有用户以及加入实时流的新用户添加到文本文件中。因此,脚本必须运行并附加新的查看器,直到实时流结束并且查看器列表为空。
我的脚本运行不正常,所以我在做些可怕的错误,为什么我需要您的帮助。 :)
首先,我的while循环无法正常工作。列表为空时不会停止。
第二,它一直保持无限循环运行,不断地重复添加所有内容。因此,无法测试文本文件中是否存在该文本。
希望您能帮助我解决这个问题。我仍然是个新手,所以请像对待需要它的孩子一样对待我:D预先,谢谢您的帮助。
预期的行为:
while data['result']['list'] != '': # keep it running while list is not empty.
with open('test.txt', 'a+') as viewers: # open text file.
for users in data['result']['list']: # iterate json.
for line in viewers: # iterate text file
if users['userId'] in line: # look if userId is already in textfile.
break # all users has already been added to text file. No new users to add.
else: # append users to file.
viewers.write(users['nickName'] + '\n')
viewers.write(str(users['userId']) + '\n')
json输出看起来像这样,只要观众加入或离开直播流,它就会发生变化:
{
"code": 1,
"result": {
"liveType": 0,
"watchNum": 140,
"rank": 0,
"duringF": 0,
"list": [
{
"userId": 294782,
"nickName": "user1"
},
{
"userId": 200829,
"nickName": "user2"
}
],
"earning": 4183,
"likeNum": 233
},
"msg": "OK"
}
答案 0 :(得分:0)
此代码有很多问题。
data
从未更改。users['userId'] in line
将匹配。因此,如果userID为10
,则如果101
或110
在行中,则它将匹配。您需要精确匹配该行。users = set(open("test.txt").read().splitlines()[1::2]) # set of userIds from file
with open("test.txt", "a") as viewers:
while True:
with open("json_file.json") as j:
data = json.load(j)
for user in data['result']['list']:
if user['userId'] not in users:
users.add(user['userId'])
viewers.write(user['nickName'] + '\n')
viewers.write(str(user['userId']) + '\n')
对此的一种改进是检查自上一次迭代以来JSON文件的修改时间是否已更改,如果没有,则跳过循环的其余部分。