Django删除重复图像

2024-05-15 17:29:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从给定目录返回随机但不同的图像

我已经编写了一个函数,它将从一个目录返回一个随机图像,但我需要它返回不同的图像,此时它返回图像,但其中一些图像是重复的

最好的方法是什么?任何帮助都将不胜感激


random_image.py

def random_image(image_dir):
    valid_extensions = ['.jpg', '.jpeg', '.png', '.gif']
    rand_dir = '/static/app_pickfeel/images/'
    # print(rand_dir)
    files = [f for f in os.listdir(settings.BASE_DIR + '/app_pickfeel/static/app_pickfeel/images')
             if f[f.rfind("."):len(f)] in valid_extensions]
    print(random.choice(files))

    return rand_dir + random.choice(files)

我正在使用template.html中的函数多次调用它

<img class="img-thumbnail" src="{{ MEDIA_URL}}{% random_image 'app_pickfeel/images/' %}">

Tags: 函数图像image目录appdirstaticextensions
2条回答

我认为您需要random.sample(),它从列表中返回n随机唯一选项,而不是在循环中调用此函数

import os

valid_extensions = {'.jpg', '.jpeg', '.png', '.gif'}
rand_path = '/static/app_pickfeel/images'
rand_dir = settings.BASE_DIR + '/app_pickfeel/' + rand_path

def random_images(n):
    files = [
        f 
        for f 
        in os.listdir(rand_dir)
        if os.path.splitext(f)[-1] in valid_extensions
    ]
    return [
        os.path.join(rand_dir, f)
        for f
        in random.sample(files, n)
    ]

然后,调用

images = random_images(5)

将为您提供(最多)5个随机文件名的列表

您可以尝试set()从列表中删除重复项

def random_image(image_dir):
    valid_extensions = ['.jpg', '.jpeg', '.png', '.gif']
    rand_dir = '/static/app_pickfeel/images/'
    # print(rand_dir)
    files = [f for f in os.listdir(settings.BASE_DIR + '/app_pickfeel/static/app_pickfeel/images')
             if f[f.rfind("."):len(f)] in valid_extensions]
    remove_duplicate = set(files)
    final_list = list(remove_duplicate)
    print(random.choice(final_list))

    return rand_dir + random.choice(final_list)

希望这能帮助你

相关问题 更多 >