如何在新月份使用 Python 重置计数器

How to reset counter when new month using Python

所以我一直在尝试制作一个按月保存图像的脚本,并使用计数器在每添加一张新照片时都会在名称末尾添加一个数字等 September_1, September_2 etc etc

我现在创建的是:

import requests
import pathlib
import os
from datetime import datetime

client.counter = 0 
try:
    response = requests.get('http://clipart-library.com/images/pT5ra4Xgc.jpg')

    if response.status_code == 200:
        dirFolder = pathlib.Path() / "{}".format(datetime.now().strftime("%B"))

        if not os.path.exists(dirFolder):
           os.makedirs(dirFolder)

        while True:
            target = dirFolder / "{}_{}.jpg".format(datetime.now().strftime("%B").lower(), client.counter)

            if not target.exists():
                with target.open('wb') as ofile:
                    ofile.write(response.content)
                    client.counter += 1
                    break
            else:
                client.counter += 1
                continue

except IndexError:
    pass

似乎只要有新的月份就会添加文件夹,但是只要有新的月份计数器就不会重置,现在我在这里需要帮助,了解如何在新的月份重置我的计数器?

只需在创建该月目录后重置计数器即可:

if not os.path.exists(dirFolder):
    os.makedirs(dirFolder)
    client.counter = 0

我已将 client.counter 重命名为 counter,因为您没有在给我们看的脚本中定义 client,所以我不知道它是从哪里来的。

假设这些目录中的 只有 是您使用此脚本保存的照片,我们可以采取快捷方式来确定该文件的名称 - 它的编号是仅比当前目录中的文件(即照片)数量多一个。这还假设您在例如开始编号。 september_1 不是 september_0

我在您的脚本中看不到任何会引发 IndexError 的内容,所以我取消了 try...except 循环。我还调整了一些其他的东西来简化它。

import requests
import pathlib
import os
from datetime import datetime

response = requests.get('http://clipart-library.com/images/pT5ra4Xgc.jpg')
if response.status_code != 200:
    raise Exception  # or however you want to handle this

month = datetime.now().strftime("%B")  # save this as a variable to re-use it
dirFolder = pathlib.Path() / month
if dirFolder.exists():  # use this handy pathlib method
    counter = len(os.listdir(dirFolder)) + 1
else:
    os.makedirs(dirFolder)
    counter = 1  # we've just created this directory, so this will be the first thing in it

target = dirFolder / "{}_{}.jpg".format(month.lower(), counter)
with target.open('wb') as ofile:
    ofile.write(response.content)

我还将 datetime.now().strftime("%B") 保存在一个名为 month 的变量中。这样做的好处是,当您稍后在脚本中使用它时,它会变得更加清晰,并且还可以保护您免受从一个月末到下一个月初之间穿越午夜的可能性极小(但有可能!)你设置 dirFolder 并且当你设置 target 时。如果你这样做,你最终会得到一个名为 e.g. 的文件。 October_158.jpgSeptember 目录中(在本例中,前一个文件是 September_157.jpg)。