分离一系列照片的脚本

时间:2019-01-15 22:21:15

标签: python

我需要通过在具有相同文件名的系列之间放置黑色占位符图片(仅文件名的后两位不同)来在视觉上分离文件夹中的照片(JPEG)。该文件夹通常包含单张(独立的)照片,其名称类似于03-12345-randomfilename.jpg,而照片系列则名为03-12345-file01.jpg,03-12345-file02.jpg,.. 03,.. 04等

单身人士应该独自呆着,但我需要在所有系列的前后放置一张黑色的图片。

我有以下Python脚本(最初由其他人编写),无故断断续续地失败。它通常可以使用,但有时会在系列的中间覆盖文件,或更常见的是,它将无法在系列的最后一张照片之后放置黑色图片。我花了几个小时试图弄清楚发生了什么,但是我陷入了困境。

任何建议,我们将不胜感激。

def blackJPG(directory):
    # iterate over every file name in the directory
    blackJPG = '/Users/username/black.jpg'

    filelist = {}
    for file_name in os.listdir(directory):
        filename, file_extension = os.path.splitext(file_name)
        stringmatch = re.compile(r'(\d{2})(.*?)(\d+)(.*?)(([A-Za-z]+))(.*?)(\d+)')
        m = stringmatch.search(file_name)

        #Create search table
        if m:
            sequence = int(m.group(8))
            filename_without_sequence = "{0}{1}{2}{3}{4}{5}".format(m.group(1),m.group(2),m.group(3),m.group(4),m.group(6),m.group(7))
            filelist.update({filename_without_sequence: (sequence)})

    for key, value in filelist.iteritems():
        if value > 1:
            newJPG = "{0}/{1}00.jpg".format(directory, key)

            if value >= 10:
                lastJPG = "{0}/{1}{2}.jpg".format(directory, key, value+1)
            else:
                lastJPG = "{0}/{1}0{2}.jpg".format(directory, key, value+1)

            #Create first blackJPG
            shutil.copyfile(blackJPG, newJPG)

            #Create last blackJPG
            shutil.copyfile(blackJPG, lastJPG)

    return "Done"

1 个答案:

答案 0 :(得分:1)

如果变体始终是最后2个字符,那么您可以抓住不改变的部分(前缀),计算前缀的数量,并为具有多个文件的文件创建一个文件:

def add_black_jpg(directory):
    series_count = {}
    for file in os.listdir(directory):
        name, ext = os.path.splitext(file)
        prefix = name[:-2]
        count = series_count.get(prefix, 0)
        series_count[prefix] = count + 1

    for prefix, count in series_count.items():
        if count > 1:
            shutil.copyfile(black_jpg_location, f"{prefix}00.jpg")