0

我编写了以下代码来保存网站上的相册。

import urllib2
import webbrowser
import os
page=1564848
fileno=1
for fileno in range(1,24):
    pages=str(page)
    filenos=str(fileno)
    picture_page = "url-to-the-website"+pages+".jpg"
    page=page+1
    os.chdir("/home/comrider/Album/")
    if not os.path.exists("3"):
        os.makedirs("3")
    os.chdir("/home/user/Album/3")
    try:
        opener1 = urllib2.build_opener()
        page1 = opener1.open(picture_page)
        my_picture = page1.read()
        filename = filenos + picture_page[-4:]
        fileno=fileno+1
        fout = open(filename, "wb")
        fout.write(my_picture)
        fout.close()
    except:
        fileno=fileno-1 #This statement is not working
        pass

由于缺少图像编号,我给出了 try 和 except 语句,并且在 except 语句中我给出了减少文件编号的语句。在 try 语句中递增。但该代码无法正常工作,导致专辑下载不完整。工作平台是linux。请帮忙。提前致谢。

4

2 回答 2

2

fileno将在下一次循环迭代中重置,您可以将其更改为您想要的任何内容,但是当当前 for 循环迭代结束时,它将从1..24

来自文档:

Python 的 for 语句迭代任何序列(列表或字符串)的项目,按照它们在序列中出现的顺序

range返回您正在沿该序列进行的列表序列

如果你需要弄乱你的计数器,你可以使用一个while循环

fileno = 1    
while fileno < 24:
  #  do stuff
  # just remember to increment at the end, you control when the loop returns
  fileno += 1
于 2012-11-28T14:00:20.427 回答
0

上一个答案中给出的信息是正确的,但可以不那么不透明地陈述,如下所示:
for fileno in range(1,24):
连续执行的陈述将产生序列fileno=1, fileno=2, fileno=3, ... fileno=23fileno无论您在循环之前或循环内做什么,它都会这样做。因此,fileno=1在循环之前设置或在fileno=fileno-1循环结束时设置是没有意义的。我建议您删除这些行以及fileno=fileno+1程序中的行。(也可以使用 while 循环,但更冗长。)

在另一个问题上,改变

    fout = open(filename, "wb")
    fout.write(my_picture)
    fout.close()

    with open(filename, "wb") as fout:
        fout.write(my_picture)

这将正确打开 fout,写入并关闭它,如with-statement的文档中所述。

于 2012-11-28T14:19:14.520 回答