Обновление: мне удалось исправить проблему с помощью функции Джереми, которая разбивает мой набор данных на 50 частей. Я опубликовал окончательный ответ.
У меня есть следующий код, поэтому я хочу разбить массив на куски, потому что я пытаюсь использовать API, который позволяет только 50 запросов одновременно. Также я Java-разработчик, который пытается перейти на Python. Что я хочу сделать, это разбить массив на 50 кусков и передать их в API.
У меня есть текстовый файл с длинным списком идентификаторов, и я на основе идентификатора, который я прочитал, создаю URL.
import simplejson as json
import sys
import urllib
import traceback, csv, string
# "base" API URL
URL_BASE = 'Some URL'
# set user agent string
urllib.version = "Data Collection Fix it"
page_ids = []
def divide_list(list_, n):
for i in range(0, len(list_), n):
yield list_[i:i + n]
def issue_query():
iFile = open('ReadFromThisFile.txt', "r")
lines = iFile.readlines()
#print len(lines)
for line in lines:
ids = string.split(line)
ids = ids[0]
page_ids.append(ids)
url = URL_BASE
indicies = range(len(page_ids))
File = open("WriteToThisFile.csv", "w")
for indicies in divide_list(page_ids, 50):
count = 0
fiftyIds =[]
url = URL_BASE
for id in indicies:
str(id).strip
url += str(id) + '|'
print url
fiftyIds.append(str(id))
count += 1
print count
rv = urllib.urlopen(url)
j = rv.read().decode("utf-8")
#sys.stderr.write(j + "\n")
data = json.loads(j)
for id in fiftyIds:
try:
s = int(data["query"]["pages"][id]["revisions"][0]["size"])
sys.stderr.write("%d\t%d\n" % (int(id), s))
File.write("%d\t%d\n" % (int(id), s))
#print ("%d\t%d\n" % (int(id), s))
# do something interesting with id and s
except Exception, e:
traceback.print_exc()
File.close()
iFile.close()
issue_query()
Я знаю, что многие опытные разработчики Python могут дать мне отрицательные оценки за такой простой вопрос, как этот, но я не смог найти хороших примеров в Google или здесь. Извините за любые проблемы, если в случае, если я повторил вопрос.
Спасибо,