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します。ループの前またはループ内で何をするかに関係なく、そうします。結果として、ループの前に設定したり、ループの最後に設定したりすることは無意味です。これらの行とその行をプログラムから削除することをお勧めします。(whileループを使用することも可能ですが、より冗長です。)fileno=2fileno=3fileno=23filenofileno=1fileno=fileno-1fileno=fileno+1

別の問題については、変更してください

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

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

with-statementのドキュメントで説明されているように、これによりfoutが適切に開き、書き込み、閉じられます。

于 2012-11-28T14:19:14.520 に答える