перебрать каждый из файлов (отсортированный) и получить 4 файла, выполнить некоторую операцию python - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть несколько файлов в папке, и я хочу, чтобы первые четыре файла выполняли какую-то операцию, а следующие четыре файла выполняли какую-то операцию и так далее. Но я не могу перебрать каждый файл, и это тоже отсортировано. Я пытался использовать glob.glob, но я не знаю, как перебирать каждый файл, используя индекс в glob.

Мои файлы 0.jpg 1.jpg 2.jpg 3.jpg 4.jpg......

for image in sorted(glob.glob(directory + '*.jpg'),key=os.path.getmtime):

    name = image.split('/')[-1]
    imgname = name.split('.')[0]

1 Ответ

0 голосов
/ 22 апреля 2020

Вот способ сделать это. Я вижу, что у вас другой вопрос почти такой же, и вам, вероятно, понадобится значение "fill" в случае, если в вашем каталоге есть количество изображений, которое не является точным кратным 4. Я предлагаю вам создать изображение «заливки» (как PNG, чтобы оно не отображалось в вашем отсортированном списке JPEG с). Сделайте изображение «заливки» того же цвета, что и фон, на который вы вставляете остальные 4 изображения, чтобы оно даже не отображалось.

#!/usr/bin/env python3

import os, glob
from itertools import zip_longest

def grouper(iterable, n, fillvalue=None):
    """
    Group items of list in groups of "n" padding with "fillvalue"
    """
    args = [iter(iterable)] * n
    return zip_longest(*args, fillvalue=fillvalue)

# Go to where the images are instead of managing a load of paths
os.chdir('images')

# Get list of filenames sorted by mtime
filenames = sorted(glob.glob('*.jpg'),key=os.path.getmtime)

# Iterate over the files in groups of 4
for f1, f2, f3, f4 in grouper(filenames, 4, 'fill.png'):
    print(f1,f2,f3,f4)

Пример вывода

iphone.jpg door.jpg hands.jpg solar.jpg
test.jpg circuit_board.jpg r1.jpg r2.jpg
thing.jpg roadhog.jpg colorwheel.jpg hogtemplate.jpg
tiger.jpg bean.jpg image.jpg bottle.jpg
result.jpg fill.png fill.png fill.png
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...