首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使rp和xrange动态化?

如何使rp和xrange动态化?
EN

Stack Overflow用户
提问于 2013-06-02 12:42:28
回答 2查看 150关注 0票数 1

嘿,伙计们,非常感谢你们抽出时间来看我的问题,我已经在这个代码上工作了大约1周(我对编码和python 1周也是新手),目前循环只有在x in xrange(x)和'rp‘时才能工作:'x’是这个xml中可用的正确行数。xml每天都在更新,我想知道是否有人可以提供一个解决方案来使x动态化?

代码语言:javascript
复制
import mechanize
import urllib
import json
import re
from sched import scheduler
from time import time, sleep

from sched import scheduler
from time import time, sleep

s = scheduler(time, sleep)

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

def getData():  
post_url = "urlofinterest_xml"
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' : '8',
              '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>')
pattern4 = re.compile('title=\'Naps posted: (.*) Winners:')
pattern5 = re.compile('Winners: (.*)\'><img src=')


for i in xrange(8):
    user_delimiter = xmlload1['rows'][i]['cell']['username']
    selection_delimiter = xmlload1['rows'][i]['cell']['race_horse']

    username_delimiter_results = re.findall(pattern1, user_delimiter)[0]
    userid_delimiter_results = int(re.findall(pattern2, user_delimiter)[0])
    user_selection = re.findall(pattern3, selection_delimiter)[0]
    user_numberofselections = float(re.findall(pattern4, user_delimiter)[0])
    user_numberofwinners = float(re.findall(pattern5, user_delimiter)[0])

    strikeratecalc1 = user_numberofwinners/user_numberofselections
    strikeratecalc2 = strikeratecalc1*100

    print "user id = ",userid_delimiter_results
    print "username = ",username_delimiter_results
    print "user selection = ",user_selection
    print "best price available as decimal = ",xmlload1['rows'][i]['cell']     ['tws.best_price']
    print "race time = ",xmlload1['rows'][i]['cell']['race_time']
    print "race meeting = ",xmlload1['rows'][i]['cell']['race_meeting']
    print "ROI = ",xmlload1['rows'][i]['cell']['roi']
    print "number of selections = ",user_numberofselections
    print "number of winners = ",user_numberofwinners
    print "Strike rate = ",strikeratecalc2,"%"
    print ""


getData()


run_periodically(time()+5, time()+1000000, 15, getData)

Kind关于AEA

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-02 13:09:15

首先,我将讨论如何迭代您的结果。根据您的代码,xmlload1['rows']是一个字典数组,因此您可以直接迭代它,而不是选择一个任意数字。

代码语言:javascript
复制
xmlload1 = {
   "rows": [{"cell": {"username": "one", "race_horse":"b"}}, {"cell": {"username": "two", "race_horse": "c"}}]
}

因此,给定上述数据,您可以在for循环中遍历各行,如下所示:

代码语言:javascript
复制
for row in xmlload1['rows']:
    cell = row["cell"]
    print cell["username"]
    print cell["race_horse"]

代码语言:javascript
复制
def get_data(rp=8, page=1):
    parameters = {'page' : str(page),
              'rp' : str(rp),
              'sortname' : 'roi',
              'sortorder' : 'desc'
             }
    data = urllib.urlencode(parameters)
    trans_array = browser.open(post_url,data).read().decode('UTF-8')
    return json.loads(trans_array)

现在,您可以调用get_data(rp=5)获取5行,或者调用get_data(rp=8)获取8行,调用get_data(rp=8, page=3)获取第三页,依此类推。您可以清楚地添加额外的变量,甚至可以直接将parameters dict传递给函数。

票数 4
EN

Stack Overflow用户

发布于 2013-06-02 13:06:34

我不确定我是否理解了你的问题,但我认为你想要的是:

代码语言:javascript
复制
rows = xmlload1['rows']
for row in rows:
    user_delimiter = row['cell']['username']
    selection_delimiter = row['cell']['race_horse']
    # ...

如果不仅需要行本身,还需要行索引,请使用enumerate

代码语言:javascript
复制
rows = xmlload1['rows']
for i, row in enumerate(rows):
    user_delimiter = row['cell']['username']
    selection_delimiter = row['cell']['race_horse']
    # ...

一般而言,如果您使用for i in range(…)的目的不是为了固定的迭代次数,那么您这样做是错误的。通常有一个你想要遍历的集合;只要找到它并遍历它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16879848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档