Skip to main content
 首页 » 编程设计

Python:将数组分成部分

2025年05月04日10davidwang456

更新:在 Jeremy 将我的数据集分成 50 个 block 的功能的帮助下,我设法解决了这个问题。我已经发布了最终答案。

我有以下代码,我想将数组分成 block 的原因是我正在尝试使用一次只允许 50 个请求的 api。我也是试图转向 python 的 java 开发人员。我想要做的是将数组分成 50 个 block 并将它们提供给 api。

我有一个包含一长串 ID 的文本文件,我根据读入的 ID 构建 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 开发人员可能会因为提出这样一个简单的问题而给我负面评价,但我在谷歌或此处找不到任何好的示例。如果我重复了一个问题,很抱歉给您带来任何麻烦。

谢谢,

请您参考如下方法:

Jeremy's answer 的生成器版本:

def divide_list(list_, n): 
 
   for i in range(0, len(list_), n): 
       yield list_[i:i + n] 
 
 
for chunk in divide_list([1,2,3,4,5], 2): 
   print chunk