0

我有一个包含 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 个文件),它应该仍然能够运行。

4

2 回答 2

1

首先,您不应该依赖底层操作系统索引来为您进行排序 - 您应该自己对图像列表进行排序(希望它们的名称按字典顺序排列)。

其次,一旦排序,只需枚举您的列表,不要删除每 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.jpg和之外image020.jpg的所有图像image030.jpg

于 2017-12-11T16:07:52.800 回答
0

你想把所有的第一和最后都保持在 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))
于 2017-12-11T16:16:57.300 回答