Я пытаюсь получить данные из файла CSV с zipped. Есть ли способ сделать это, не распаковывая все файлы? Если нет, как я могу разархивировать файлы и читать их эффективно?
Чтение csv zip файлов в python
Ответ 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)
Ответ 6
Современные Pandas начиная с версии 0.18.1 изначально поддерживают сжатые файлы CSV: метод read_csv имеет параметр сжатия: {'infer', 'gzip', 'bz2', 'zip', 'xz', None}, по умолчанию "вывод".
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html
Ответ 7
Быстрое решение может быть с помощью приведенного ниже кода!
import pandas as pd
#pandas support zip file reads
df = pd.read_csv("/path/to/file.csv.zip")