for i in range(9)
ということはi+1 = 1, ..., 9
の9枚ということで大丈夫でしょうか? (0~9の10枚じゃないのかなと思いました)
もしそうならば、代わりにfor i in range(1, 10, 1)
と書けばi = 1, ..., 9
となり、ループの中でi
をそのまま使うことができます。
もとのコードが
python
1import os
2from datetime import datetime
3import shutil
4
5# import pathlib # テスト用に./photo/00*.jpgを作る
6
7
8for i in range(1, 10, 1):
9 # org_picture = pathlib.Path("./photo/00" + str(i) + ".jpg") # テスト用に./photo/00*.jpgを作る
10 # if not os.path.exists(org_picture): # テスト用に./photo/00*.jpgを作る
11 # org_picture.touch() # テスト用に./photo/00*.jpgを作る
12 mtime = os.path.getmtime("photo/00" + str(i) + ".jpg")
13 dt = datetime.fromtimestamp(mtime)
14 dpath = 'photo/' + dt.strftime('%Y%m%d')
15 if os.path.isdir(dpath) == False:
16 os.mkdir(dpath)
17 shutil.move('photo/00'+ str(i) + '.jpg', dpath)
だったとして、while
を使うと
python
1import os
2from datetime import datetime
3import shutil
4# import pathlib # テスト用に./photo/00*.jpgを作る
5
6
7i = 1 # iの初期値
8while i < 10: # i<10が真、つまりi=1からi=9まで以下を繰り返す(最後にiの値を1つ増やしている)
9 # org_picture = pathlib.Path("./photo/00" + str(i) + ".jpg") # テスト用に./photo/00*.jpgを作る
10 # if not os.path.exists(org_picture): # テスト用に./photo/00*.jpgを作る
11 # org_picture.touch() # テスト用に./photo/00*.jpgを作る
12 mtime = os.path.getmtime("photo/00" + str(i) + ".jpg") # 同じ
13 dt = datetime.fromtimestamp(mtime) # 同じ
14 dpath = 'photo/' + dt.strftime('%Y%m%d') # 同じ
15 if os.path.isdir(dpath) == False: # 同じ
16 os.mkdir(dpath) # 同じ
17 shutil.move('photo/00'+ str(i) + '.jpg', dpath) # 同じ
18 i = i + 1 # iの値を1つ増やす(インクリメントという)
とかけるのかな、と思います。解説すべきこととしては
python
1i = 1
2while i < 10:
3 # ...なにかの処理...
4 i = i + 1
という形になっていて、while
の外に初期値、while
の中でインクリメントしていて、i < 10
が満たされている間はずっと...なにかの処理...
を行う、ということでしょうか。whileを使う時には無限ループに注意です。
それから、質問をする時にはマークダウンという記法が使われます。使い方は簡単なのでググってみてください。
ソースコードを載せる時には、そのコードを```` (
が三つ)で囲むといい感じになります。teratailの質問の定型分を無理して使わなくてもいいと思います。