Как работать с CSV-файлами в заархивированной папке?

Я работаю с заархивированными файлами в Python в первый раз, и я в тупике.

Я прочитал документацию по zipfile, но я не уверен, что будет лучшим способом сделать то, что я пытаюсь сделать. У меня есть zip-папка с CSV-файлами внутри, и я хотел бы иметь возможность открыть zip-файл и извлечь определенные значения из csv-файлов внутри.

Использую ли я zipfile.extract(имя файла здесь), чтобы перенести его в текущий рабочий каталог? И если я сделаю это, я просто использую имя файла для работы с файлом, или этот индекс или список их по-другому?

В настоящее время я вручную извлекаю все файлы в zip-папке в текущий рабочий каталог моего проекта, а затем использую модуль csv для их чтения. Все, что я действительно пытаюсь сделать, это удалить этот шаг.

Любая помощь будет принята с благодарностью!

1 ответ

Вы хотите избежать распаковки на диск, в zip docs для python есть ZipFile.open() который дает вам файл-подобный объект. Это объект, который в основном ведет себя как обычный файл на диске, но находится в памяти. При чтении выдает массив байтов, по крайней мере, в py3.

Что-то вроде этого...

from zipfile import ZipFile
import csv


with ZipFile('abc.zip') as myzip:
    print(myzip.filelist)
    for mf in myzip.filelist:
        with myzip.open(mf.filename) as myfile:
            mc = myfile.read()
            c = csv.StringIO(mc.decode())
            for row in c:
                print(row)

Документация Python на самом деле довольно хороша, как только вы узнаете, как находить вещи, а также некоторые основные термины / описания программирования, используемые в документации. По какой-то причине csv.BytesIO не реализован, следовательно, дополнительный шаг через csv.StringIO,

Другие вопросы по тегам