删除第 2 到第 9 个文件并循环延时 Python

Delete the 2nd to 9th file and loop for a timelapse Python

我有一个包含 1000 张照片的文件夹,我想对其进行延时摄影。这些照片每 60 秒拍摄一次,我想做一个 10 分钟的间隔时间。所以我需要删除每 2 到 9 张照片并让它循环播放。例如,给定一个文件夹中的 1000 张照片,我希望脚本保留照片 1、10、20、30 等等。在此脚本结束时,该文件夹应仅包含 100 张照片。

以下代码删除每“第 10”张照片,这与我想要的不完全一样:

import os
dir_to_clean = '/Users/myname/Desktop/TBD'
l = os.listdir(dir_to_clean)

for n in l[::10]:
    os.unlink(dir_to_clean + '/' + n)

如何修改此代码,使其每隔 2-9 张照片删除一次?如果该文件夹没有偶数个文件(例如,如果它有 1005 个文件),它应该仍然能够 运行。

首先,你不应该依赖底层的 OS 索引来为你排序——你应该自己对图像列表进行排序(希望它们的名字是按字典顺序排列的)。

其次,排序后,只需枚举您的列表,不要删除每 10 个项目,例如:

import os

dir_to_clean = '/Users/myname/Desktop/TBD'
images = sorted(os.listdir(dir_to_clean))

for i, image in enumerate(images):
    if i % 10 != 0:
        os.remove(os.path.join(dir_to_clean, image))

对于像这样的图像列表:["image000.jpg", "image001.jpg", "image002.jpg", "image003.jpg", ... "image035.jpg"] 这将删除除 image000.jpgimage010.jpgimage020.jpgimage030.jpg 之外的所有图像。

你想把所有的第一个和最后一个都保持在 10 分钟的范围内,所以我会这样做:

import os
dir_to_clean = '/Users/myname/Desktop/TBD'
images = sorted(os.listdir(dir_to_clean))

for i, x in enumerate(images):
    #print i, i % 10
    if i % 10 == 0 or i % 10 == 9:
        print("Keeping : " + str(x))
    else:
        print("Deleting: " + str(x))
        os.remove(os.path.join(dir_to_clean, image))