for循环不能在python中工作

时间:2017-07-05 12:44:16

标签: python for-loop

in outer loop i=156 ,it is not looping for other values of i=1,2,3,4.......我试图在scrapy python中运行这个for循环。但是第一个循环不起作用

for i in range(1,157):
     start_urls = ["https://appworld.blackberry.com/cas/producttype/apps?"
          "countryid=100&lang=en&page={}&pagesize={}&"
          "sortby=popular&licensetype=all&callback=_producttype_apps"
          "&_=1499255634459".format(i, page) for page in xrange(1,1001)]

start_urls外的第一个循环不起作用 所需的结果是这样的,因为page = 1 pagesize应该从1到1000运行,而page = 2 pagesize应该再​​次从1运行到1000,依此类推,直到page = 156

4 个答案:

答案 0 :(得分:2)

您错误地使用了try { ProcessBuilder pb = new ProcessBuilder("7z", "e", "bootstrap.7z", "-so", "bootstrap.txt"); Process p = pb.start(); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(p.getOutputStream())); BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); writer.write("password" + "\n"); writer.flush(); writer.close(); String line = null; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } 格式字符串,您可以创建<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" /> <xsl:strip-space elements="*" /> <xsl:key name="key-bill" match="shippingBill" use="shippingBillNo" /> <!-- identity transform --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()" /> </xsl:copy> </xsl:template> <xsl:template match="shippingBills"> <xsl:variable name="distinct-bills" select="shippingBill[generate-id() = generate-id(key('key-bill', shippingBillNo)[1])]" /> <checkSum> <noOfInvoices> <xsl:value-of select="count(shippingBill/invoice)" /> </noOfInvoices> <noOfShippingBills> <xsl:value-of select="count($distinct-bills)" /> </noOfShippingBills> </checkSum> <xsl:copy> <xsl:apply-templates select="$distinct-bills" mode="group" /> </xsl:copy> </xsl:template> <xsl:template match="shippingBill" mode="group"> <shippingBill> <xsl:apply-templates select="*[not(self::invoice)]" /> <invoices> <xsl:apply-templates select="key('key-bill', shippingBillNo)/invoice" /> </invoices> </shippingBill> </xsl:template> </xsl:stylesheet> ,但可能更容易使用%。您还可以拆分字符串以获得更好的格式:

tuple()

答案 1 :(得分:1)

你好Emon,

试试这段代码, 在下面的代码中使用“\”,所以不要混淆,因为它用于多行代码编写,这个功能是python内置提供的。

for i in range(1,157):
    start_urls = ['https://appworld.blackberry.com/cas/producttype/apps?' \
            'countryid=100&lang=en&' \
            'page=%d' \
            '&pagesize=%s'\
            '&sortby=popular&licensetype=all&callback=_producttype_apps&_=1499255634459' % (i,page) for page in xrange(1,1001)]

    # Display starts_urls 
    print(start_urls)

使用格式方法
按位置访问参数

for i in range(1,157):
    start_urls = ['https://appworld.blackberry.com/cas/producttype/apps?' \
            'countryid=100&lang=en&' \
            'page={0}' \
            '&pagesize={1}' \
            '&sortby=popular&licensetype=all&callback=_producttype_apps&_=1499255634459'.format(i,page) for page in xrange(1,1001)]

当你使用long任何类型的字符串/内容时,我建议使用format method因为你很容易理解代码。

以下链接的更多示例读取,
1. https://wiki.python.org/moin/ForLoop
2. https://www.codeproject.com/Tips/820236/Python-String-Formatting-Using-format-Method

我希望我的回答很有帮助。如有任何问题请征求意见。

答案 2 :(得分:0)

你可能想要做的是

start_urls = ["https://appworld.blackberry.com/cas/producttype/apps?"
      "countryid=100&lang=en&page={}&pagesize={}&"
      "sortby=popular&licensetype=all&callback=_producttype_apps"
      "&_=1499255634459".format(i, page) for page in xrange(1,1001) for i in range(1,157)]

如果订单很重要,你可以通过反转for循环来反过来:

start_urls = ["https://appworld.blackberry.com/cas/producttype/apps?"
              "countryid=100&lang=en&page={}&pagesize={}&"
              "sortby=popular&licensetype=all&callback=_producttype_apps"
              "&_=1499255634459".format(i, page) for i in range(1,157) for page in xrange(1,1001)]

你以不同的方式使用两个不同的循环 - 你使用外部for循环是错误的。想一想:

for i in range(10):
    x = i

对于每次迭代,您将变量x赋值为i,但在执行任何其他操作之前,请将其重新分配给下一个i。这基本上就是你在代码中所做的事情。

替代方案包括附加到列表:

x = []
for i in range(10):
    x.append(i)

或您在代码中使用的列表推导

x = [i for i in range(10)]

显然这些都是愚蠢的例子,因为它们只是从range(10)

再现列表

答案 3 :(得分:-1)

首先尝试将列表转换为元组 然后寻找格式化敏感的影响。