Python 仅执行两个链接范围中的第一个
考虑下面的简单循环,它产生我想要的输出:Python 仅执行两个链接范围中的第一个,python,Python,考虑下面的简单循环,它产生我想要的输出: import itertools as it for e in range (0, 16): for i in it.chain(range(30, 53), range(1, 19)): print(e, i) 我构建的此代码的放大版本没有产生预期的结果: import json import requests import time import datetime import dateutil import trac
import itertools as it
for e in range (0, 16):
for i in it.chain(range(30, 53), range(1, 19)):
print(e, i)
我构建的此代码的放大版本没有产生预期的结果:
import json
import requests
import time
import datetime
import dateutil
import traceback
import os.path
import itertools as it
year_map = [2,89,213,359,542,803,1208,937,2025,2539,3115,4345,5476,6531,7794,9155,5826]
tournament_map = [26,114,243,421,579,903,1291,1645,2175,2689,3419,4940,5861,6978,8273]
years = [1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015]
for i in range (0, 16):
try:
url = ('http://www.whoscored.com/tournamentsfeed/',str(year_map[i]),'/Fixtures/')
url = ''.join(url)
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
'Host': 'www.whoscored.com',
'Referer': 'http://www.whoscored.com/'}
for f in it.chain(range(30, 53), range(1, 19)):
game_week = (str(years[i]), 'W', str(f))
game_week = ''.join(game_week)
params = {'d': game_week,
'isAggregate': 'false'}
response = requests.get(url, params=params, headers=headers)
response2 = (url, str(params))
response2 = ','.join(response2)
json_data = response.content.replace("'", '"').replace(',,', ',null,')
fixtures = json.loads(json_data)
if len(fixtures) > 1:
myfile = ",\n".join([", ".join(str(x) for x in fixture) for fixture in fixtures]) # `fixtures` is a nested list
print myfile
myfile2 = myfile + '\n'
time.sleep(20)
#create text file here
except Exception as exc:
print response2
print exc
print response.status_code
print response.text
pass
time.sleep(20)
print "-" *120
然而,当我运行这个版本的代码时,它只会迭代两个链接范围中的第一个。在这种情况下,它会为一个赛季的8月到12月之间浏览的部分足球数据生成数据。然后,代码停止执行,不会出错
有人能在代码中看到导致这种情况发生的任何东西吗?我被难住了
感谢循环工作正常,并且包含了来自
range()
调用的值;您确定您正确诊断了这些问题吗?还请注意,由于Python 2range()
生成列表对象,因此您最好使用range(30,53)+range(1,19)
一次,然后迭代结果。或者在这里切换到使用xrange()
。我不太清楚为什么在给定的年份中,你将第1-18周放在第30-52周之前。@MartijnPieters嗨,martijn。数据来自服务器的方式是,两个不同年份的第30-52周和第1-18周被分配相同的年份值,因为它们是同一运动季节的一部分。我打印到日志的输出只运行了30-52周,然后代码就完成了执行。输出文本文件的内容也反映了这一点。我将再看一看代码和您关于范围语法的建议,以便继续使用。很可能,它没有为某些循环迭代输入if len(fixtures)>1:
条件,因此没有打印任何内容。在循环开始处放置一个print
,查看是否执行了所有循环迭代。我现在正在执行代码,而没有考虑if语句。将让您知道结果。循环工作正常,包括range()
调用的值;您确定您正确诊断了这些问题吗?还请注意,由于Python 2range()
生成列表对象,因此您最好使用range(30,53)+range(1,19)
一次,然后迭代结果。或者在这里切换到使用xrange()
。我不太清楚为什么在给定的年份中,你将第1-18周放在第30-52周之前。@MartijnPieters嗨,martijn。数据来自服务器的方式是,两个不同年份的第30-52周和第1-18周被分配相同的年份值,因为它们是同一运动季节的一部分。我打印到日志的输出只运行了30-52周,然后代码就完成了执行。输出文本文件的内容也反映了这一点。我将再看一看代码和您关于范围语法的建议,以便继续使用。很可能,它没有为某些循环迭代输入if len(fixtures)>1:
条件,因此没有打印任何内容。在循环开始处放置一个print
,查看是否执行了所有循环迭代。我现在正在执行代码,而没有考虑if语句。我会让你知道结果的。