Логический вопрос Python - обработка каталогов и файлов в них - PullRequest
0 голосов
/ 17 марта 2010

Я использую эту функцию для извлечения файлов из архива .zip и сохранения его на сервере:

def unzip_file_into_dir(file, dir):
    import sys, zipfile, os, os.path

    os.makedirs(dir, 0777)
    zfobj = zipfile.ZipFile(file)
    for name in zfobj.namelist():
        if name.endswith('/'):
            os.mkdir(os.path.join(dir, name))
        else:
            outfile = open(os.path.join(dir, name), 'wb')
            outfile.write(zfobj.read(name))
            outfile.close()

И использование:

unzip_file_into_dir('/var/zips/somearchive.zip', '/var/www/extracted_zip')

somearchive.zip имеют такую ​​структуру:

somearchive.zip
    1.jpeg
    2.jpeg
    another.jpeg

или, иногда, вот этот:

somearchive.zip
    somedir/
        1.jpeg
        2.jpeg
        another.jpeg

Вопрос: как мне изменить мою функцию, чтобы мой каталог extracted_zip всегда содержал только изображения, а не изображения в другом подкаталоге, даже если изображения хранятся в somedir внутри архива.

1 Ответ

4 голосов
/ 17 марта 2010

Используйте

outfile = open(os.path.join(dir, os.path.basename(name)), 'wb')

чтобы убрать путь от имени записи ZIP. Таким образом, останется только имя файла, и вы не получите никаких каталогов. Вы также должны закомментировать os.mkdir() или заменить его на pass.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...