我需要从图像列表中创建一个打开的图像命令列表。我必须这样做,而不是使用"open image"因为我需要将这种格式的数据传递给函数
让我解释一下。
这是我的格式:
img_my_list=['img_1.png','img_2.png', 'img_3.png']
这是我需要的函数格式(我不能在函数中使用for):
img_open_format_list = [(open(join(dirname(__file__), 'img_1.png'), 'rb'), 'image/png'),
(open(join(dirname(__file__), 'img_2.png'), 'rb'), 'image/png'),
(open(join(dirname(__file__), 'img_3.png'), 'rb'), 'image/png')]
如何转换列表?
除非用作上下文管理器,否则每个open
都应该伴随着close
。
contextlib.ExitStack
非常适合这个任务。
from contextlib import ExitStack
img_my_list=['img_1.png','img_2.png', 'img_3.png']
with ExitStack() as stack:
images = [(stack.enter_context(open(img, 'rb')), 'image/png') for img in img_my_list]
... # do work
当您退出作用域时,所有打开的图像将被关闭。
我发现这可以用map
来完成:
img_my_list = ['img_1.png','img_2.png', 'img_3.png']
img_open_command_list = map(lambda x: (open(x, 'rb'), 'image/png'), img_my_list)
这样我就得到了我想要的打开命令列表:list(img_open_command_list)
。这些图片在我的报告中是完美的。