#python #list
#python #Список
Вопрос:
Я считываю количество файлов изображений в папке и присваиваю это значение say fnum
. Затем я хочу добавить эти изображения в список.
Сначала я получаю изображения, используя:
import os
fnum = int(len(os.listdir("Photos")))
i = 1
for n in range(fnum):
globals()["my_img" str(i)] = ImageTk.PhotoImage(Image.open("Photos/Picture" str(i) "_Thumbnail.JPG"))
i = 1
На данный момент все в порядке.
Например, если fnum
равно 6, я могу сделать это с помощью:
image_list = [my_img1, my_img2, my_img3, my_img4, my_img5, my_img6]
но я хочу иметь возможность сделать это для общего случая, чтобы охватить:
image_list = [my_img1, my_img2, ....., my_img(fnum)]
Я попробовал это:
image_list = []
for i in range(1, fnum):
image_list.append(my_img (i))
i = 1
Вы можете помочь?
Ответ №1:
Вероятно, вы ищете что-то подобное, без каких-либо подобных globals()
ошибок:
import glob
images = []
for path in glob.glob("Photos/Picture*Thumbnail.JPG"):
image = ImageTk.PhotoImage(Image.open(path))
images.append(image)
Затем вы можете получить доступ к каждому PhotoImage
объекту с images[0]
помощью , images[1]
, и т.д., или перебирать их с for image in images:
помощью .
Ответ №2:
Если ваша проблема заключается только в добавлении нового «my_img» номер в список, вы можете использовать добавление или добавление списков:
#Your code (I am assuming it works)
import os
fnum = int(len(os.listdir("Photos")))
i = 1
for n in range(fnum):
globals()["my_img" str(i)] = ImageTk.PhotoImage(Image.open("Photos/Picture" str(i) "_Thumbnail.JPG"))
i = 1
#Code which uses append
fnum = 6
image_list = []
for i in range(1, fnum):
image_list.append("my_img" str(i))
#print (image_list)
#Code which uses append
fnum = 6
image_list = []
for i in range(1, fnum):
image_list.append("my_img" str(i))
#print (image_list)
#Change list with names of variables to list with values of these variables
image_list = [globals()[variableName] for image in image_list]
print(image_list)
Quciknote: пока вы используете for i в диапазоне, вам не нужно увеличивать I самостоятельно. Диапазон определяет списки, такие как [1, 2, 3, 4, 5, …, fnum] и выбор каждого значения из этого списка для каждой итерации.
Редактировать:
Я добавил строку, которая преобразует список имен в список значений в приведенный выше код.
Комментарии:
1. Спасибо за эти идеи. Я могу заставить его работать для встроенного случая:
2. Если я выполняю прошивку с 6 фотографиями — image_list = [my_img1, my_img2, my_img3, my_img4, my_img5, my_img6] #image_list = [my_img(i), для i = 1, fnum] печать (image_list) Я получаю печать [ Объект PhotoImage в 0x0000017E3150FFD0>, Объект PhotoImage в 0x0000017E33640220>, Объект PhotoImage в 0x0000017E3150FE20>, Объект PhotoImage в 0x0000017E3364B790>, Объект PhotoImage в 0x0000017E3364B8E0>, Объект PhotoImage в 0x0000017E3364B9A0>] >>>
3. Но если я использую вашу версию, я получаю [‘my_img1’, ‘my_img2’, ‘my_img3’, ‘my_img4’, ‘my_img5’] для печати того, что находится в image_list
4. @Bill Ну, похоже, я не до конца понял вашу проблему. =) Однако я обновил свой ответ, поскольку преобразование списка имен в список значений — это всего лишь одна строка кода