Python 将用户id映射到dict上,比较用户是否已在dict中

Python 将用户id映射到dict上,比较用户是否已在dict中,python,xml,loops,python-2.7,dictionary,Python,Xml,Loops,Python 2.7,Dictionary,我有一段代码,目前可以从一个XML文件(从一个网站获得)打印每个用户的数据。随着越来越多的用户整天与XML交互,XML会更新。我现在有我的代码循环,每5分钟下载一次数据 每次运行代码时,它都会生成一个用户列表及其统计信息, 前5分钟打印用户:z,y,z 第二个5分钟打印用户: x,y,z,a,b x,y,z,a,b,c,d 第三个5分钟打印用户: x,y,z,a,b x,y,z,a,b,c,d 打印前5分钟所需的代码: x,y,z 第二个5分钟: a,b c,d 第三个5分钟:

我有一段代码,目前可以从一个XML文件(从一个网站获得)打印每个用户的数据。随着越来越多的用户整天与XML交互,XML会更新。我现在有我的代码循环,每5分钟下载一次数据

每次运行代码时,它都会生成一个用户列表及其统计信息, 前5分钟打印用户:z,y,z

第二个5分钟打印用户:

x,y,z,a,b
x,y,z,a,b,c,d
第三个5分钟打印用户:

x,y,z,a,b
x,y,z,a,b,c,d
打印前5分钟所需的代码:

x,y,z 
第二个5分钟:

a,b 
c,d
第三个5分钟:

a,b 
c,d
一些人如何认识到一些用户已经被使用。每个用户都有一个唯一的用户id,我想可以匹配吗

我附上一个代码示例,以防对您有所帮助

import mechanize
import urllib
import json
import re
import random
import datetime
from sched import scheduler
from time import time, sleep

######Code to loop the script and set up scheduling time

s = scheduler(time, sleep)
random.seed()

def run_periodically(start, end, interval, func):
    event_time = start
    while event_time < end:
        s.enterabs(event_time, 0, func, ())
        event_time += interval + random.randrange(-5, 45)
    s.run()

###### Code to get the data required from the URL desired
def getData():  
    post_url = "URL OF INTEREST"
    browser = mechanize.Browser()
    browser.set_handle_robots(False)
    browser.addheaders = [('User-agent', 'Firefox')]

######These are the parameters you've got from checking with the aforementioned tools
    parameters = {'page' : '1',
              'rp' : '250',
              'sortname' : 'roi',
              'sortorder' : 'desc'
             }
#####Encode the parameters
    data = urllib.urlencode(parameters)
    trans_array = browser.open(post_url,data).read().decode('UTF-8')

    xmlload1 = json.loads(trans_array)
    pattern1 = re.compile('>&nbsp;&nbsp;(.*)<')
    pattern2 = re.compile('/control/profile/view/(.*)\' title=')
    pattern3 = re.compile('<span style=\'font-size:12px;\'>(.*)<\/span>')



##### Making the code identify each row, removing the need to numerically quantify the     number of rows in the xmlfile,
##### thus making number of rows dynamic (change as the list grows, required for looping function to work un interupted)

    for row in xmlload1['rows']:
        cell = row["cell"]

##### defining the Keys (key is the area from which data is pulled in the XML) for use in the pattern finding/regex

        user_delimiter = cell['username']
        selection_delimiter = cell['race_horse']


        if strikeratecalc2 < 12 : continue;

##### REMAINDER OF THE REGEX DELMITATIONS
        username_delimiter_results = re.findall(pattern1, user_delimiter)[0]
        userid_delimiter_results = (re.findall(pattern2, user_delimiter)[0])
        user_selection = re.findall(pattern3, selection_delimiter)[0]



##### Printing the results of the code at hand

        print "user id = ",userid_delimiter_results
        print "username = ",username_delimiter_results
        print "user selection = ",user_selection
        print ""





    getData()


    run_periodically(time()+5, time()+1000000, 3000, getData)
导入机械化
导入URL库
导入json
进口稀土
随机输入
导入日期时间
从sched导入计划程序
从时间导入时间,睡眠
######循环脚本并设置调度时间的代码
s=调度程序(时间、睡眠)
random.seed()
def定期运行(开始、结束、间隔、功能):
事件时间=开始
当事件时间<结束时:
s、 enterabs(事件时间,0,函数,())
事件时间+=间隔+随机随机范围(-5,45)
s、 运行()
######从所需URL获取所需数据的代码
def getData():
post_url=“感兴趣的url”
browser=mechanize.browser()
browser.set_handle_robots(False)
browser.addheaders=[('User-agent','Firefox')]
######这些是通过上述工具检查得到的参数
参数={'page':'1',
‘rp’:‘250’,
“sortname”:“roi”,
“排序器”:“描述”
}
#####对参数进行编码
data=urllib.urlencode(参数)
trans_array=browser.open(post_url,data).read().decode('UTF-8'))
xmload1=json.loads(trans_数组)

pattern1=re.compile('>(.*))可以跟踪列表中已输出的
用户id
,但可能更容易记住上次离开的列表中的位置——也就是说,如果在前一次运行中已输出前5个用户,则在下一次运行时从第6行开始。您可以在循环中实现这一点,如:

#outside of the run loop
number_output = 0

#in the run lop
for row in xmlload1['rows'][number_output:]:
    number_output += 1
    cell = row["cell"]
唯一的问题是,如果用户可以在输入文件中复制,并且您不想输出用户的第二个实例。在这种情况下,最好使用。然后,每次输出用户时,将其用户名添加到您的集合中,如

my_set.update(username)
并检查用户是否已通过

if username in my_set:
    ...

可以跟踪列表中已输出的
用户id
,但可能更容易记住上次离开的列表中的位置——也就是说,如果在前一次运行中已输出前5个用户,则在下一次运行时从第6行开始。您可以在循环中实现这一点,如:

#outside of the run loop
number_output = 0

#in the run lop
for row in xmlload1['rows'][number_output:]:
    number_output += 1
    cell = row["cell"]
唯一的问题是,如果用户可以在输入文件中复制,并且您不想输出用户的第二个实例。在这种情况下,最好使用。然后,每次输出用户时,将其用户名添加到您的集合中,如

my_set.update(username)
并检查用户是否已通过

if username in my_set:
    ...

最简单的方法是保留一个所有用户id的列表,如果id已经存在,不要打印任何东西。@FMc嘿,FMc,我已经尝试了12天的python编码了,恐怕没有一些示例可以使用或进行反向工程,我不知道从何处开始!:s Kind as最简单的事情是我将保留一份所有用户id的列表,如果id已经存在,不要打印任何东西。@FMc嘿,FMc,我已经尝试了12天的python编码了,恐怕没有一些示例可以使用或进行反向工程,我不知道从何处开始!:s亲切问候AEAHey谢谢你的回复Michael,ho无论列表是按ROI排序的,这意味着任何注册其数据的新用户都可以替换第3行的用户。例如,到目前为止,3个被抵制的用户,ROI为5%10%和12%。这些用户将被列为第1行12%第2行10%第3行5%。在第二次刮取xml时,用户已注册了ROI为7%的数据,他将被输入第3行替换第3行中的旧用户。我希望这是有意义的。@AEA,如果用户没有被排序,那么使用
集合的方法(我回答的后半部分)很合适。这种方法与您建议的使用dict类似,但内存和时间效率更高。嘿,谢谢您的回复Michael,但是列表是按ROI排序的。这意味着任何注册其数据的新用户都可以替换第3行的用户。例如,到目前为止有3个用户被拒绝,ROI为5%10%和12%。这些用户将我将被列为第1行12%第2行10%第3行5%。在第二次刮取xml后,一个用户以7%的ROI注册了他的数据,他将被输入到第三行,取代第3行中的老用户。我希望这是有意义的。@AEA,如果用户没有被排序,那么使用
集合的方法(我回答的后半部分)这种方法与您建议的使用dict类似,但更节省内存和时间。