Получить файловые объекты внутри области с блоком

Например, есть оператор with:

with open("ACCELEROMETER", 'w') as ACCELEROMETER,\
    open('GPS', 'w') as GPS,\
    open('LIGHT', 'w') as LIGHT,\
    open('LOCATION', 'w') as LOCATION,\
    open('MIC', 'w') as MIC,\
    open('SCREEN', 'w') as SCREEN,\
    open('TIME', 'w') as TIME:

Я хочу получить файловые объекты, только что созданные с использованием некоторого кода Python: я ищу эквивалент функция dir для локальной области действия with. Является ли это возможным?


person rok    schedule 05.12.2013    source источник
comment
хм? Что ты хочешь здесь делать... тебе нужен список [ACCELEROMETER, GPS, LIGHT, ...]? А зачем тебе это? Возможно, более подходящим был бы другой подход.   -  person mgilson    schedule 05.12.2013


Ответы (1)


То, о чем вы просите, на самом деле невозможно (без некоторых предположений), поскольку with не создает новое пространство имен. Вы можете создать объект списка файлов, который реализован как менеджер контекста...

class FileList(list):
    def __init__(self, files, mode='r'):
        list.__init__(open(arg, mode) for arg in files)
    def __enter__(self):
        return self
    def __exit__(self, *args):
        for fobj in self:
            fobj.close()

with FileList(["ACCELEROMETER", "GPS", ...], mode='w') as fl:
    for fobj in fl:
        ...
person mgilson    schedule 05.12.2013