Zip-файл Python, шаблоны

1

Мне было интересно, как я могу сказать Python извлекать только файлы ".txt" из ZIP-папки, используя подстановочный знак. Этот код отлично работает для меня:

extractor.extract("\websitefiles\test.hmtl")"

Как я могу использовать этот же код для извлечения всех .txt файлов в этом текущем каталоге? Я думал примерно так:

extractor.extract(".*.txt")

но он не сработал. Любые идеи???

Теги:

4 ответа

3
Лучший ответ

Мне просто нужен python для извлечения файлов .txt в текущем каталоге, размер которых не превышает 3 мегабайт.

#!/usr/bin/env python
import zipfile
from contextlib import closing

MiB = 2**20 # mebibyte

with closing(zipfile.ZipFile("example.zip")) as zfile:
    for info in zfile.infolist():
        if info.filename.endswith('.txt') and 0 < info.file_size <= 3*MiB:
            zfile.extract(info)
4

Сначала вам понадобится список имен файлов, используя namelist(). Затем вы можете отфильтровать файлы "*.txt" с помощью txtfiles = fnmatch.filter(fn_list,"*.txt") Теперь вы можете извлекать файлы по одному:

extracts = [ extractor.extract(txt) for txt in txtfiles ]
  • 0
    он не может распознать, что такое fn_list ..
  • 1
    @ user715578: fn_list == filename_list это список, полученный с помощью namelist()
2

Вам нужно будет получить список всех файлов в ZIP файле, а затем спросить каждого, по одному за раз. Zipfile имеет метод namelist(), чтобы предоставить вам этот список.

  • 0
    о, как бы я это сделал, если бы я только хотел извлечь файлы .txt размером не более 3 мегабайт?
  • 0
    @ user715578: Используйте file_size элемент на объект , возвращаемый ZipFile.getinfo(name) .
Показать ещё 2 комментария
1

Используйте функцию namelist(), чтобы получить имена файлов. Затем выберите txt файлы из списка и извлеките их один за другим.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню