Чтение csv zip файлов в python

Я пытаюсь получить данные из файла CSV с zipped. Есть ли способ сделать это, не распаковывая все файлы? Если нет, как я могу разархивировать файлы и читать их эффективно?

Ответ 1

Я использовал модуль "zipfile" для импорта ZIP файла yo pandas. let say Имя файла - "intfile", а в zip - "THEZIPFILE".

import pandas as pd
import zipfile

zf = zipfile.ZipFile('C:/Users/Desktop/THEZIPFILE.zip') 
df = pd.read_csv(zf.open('intfile.csv'))

Ответ 2

Да. Вам нужен модуль "zipfile"

Вы открываете сам файл zip с помощью zipfile.ZipInfo([filename[, date_time]])

Затем вы можете использовать ZipFile.infolist() для перечисления каждого файла в zip и извлечь его с помощью ZipFile.open(name[, mode[, pwd]])

Ответ 3

zipfile также поддерживает оператор with.

Итак, добавив в yaron ответ на использование pandas:

with zipfile.ZipFile('file.zip') as zip:
    with zip.open('file.csv') as myZip:
        df = pd.read_csv(myZip) 

Ответ 4

Думал, что у Ярона лучший ответ, но думал, что я добавлю код, который перебирает несколько файлов внутри zip-папки. Затем он добавит результаты:

import os
import pandas as pd
import zipfile

curDir = os.getcwd()
zf = zipfile.ZipFile(curDir + '/targetfolder.zip')
text_files = zf.infolist()
list_ = []

print ("Uncompressing and reading data... ")

for text_file in text_files:
    print(text_file.filename)
    df = pd.read_csv(zf.open(text_file.filename)
    # do df manipulations
    list_.append(df)

df = pd.concat(list_)

Ответ 5

Если вы не используете Pandas, это можно сделать полностью с помощью стандартной библиотеки lib. Вот код Python 3.7:

import csv
from io import TextIOWrapper
from zipfile import ZipFile

with ZipFile('yourfile.zip') as zf:
    with zf.open('your_csv_inside_zip.csv', 'r') as infile:
        reader = csv.reader(TextIOWrapper(infile), 'UTF-8')
        for row in reader:
            # process the CSV here
            print(row)

Ответ 7

Быстрое решение может быть с помощью приведенного ниже кода!

import pandas as pd

#pandas support zip file reads
df = pd.read_csv("/path/to/file.csv.zip")