Что представляет собой независимое от ОС решение для использования fread в zip-архиве? Кажется, я не могу найти ни одного.

Подготовка сцены

Давайте создадим два фрейма данных, запишем их на диск и поместим в zip-архив (я украл это из: Как заархивировать несколько файлов CSV в R?)

library(zip)
df1 <- head(mtcars)
df2 <- head(iris)
write.csv(df1, 'df1.csv')
write.csv(df2, 'df2.csv')
zip(zipfile='df.zip', files=list.files(path = getwd(), pattern = ".csv$"))

Теперь я хочу прочитать этот zip в R

Допустим, я хочу прочитать df1.csv из архива.

fread('df.zip/df1.csv')

Ошибка в fread ("df.zip/df1.csv"): файл 'df.zip/df1.csv' не существует или не читается

Я пробовал это из fread () файла из архива

fread('unzip -p df.zip/df1.csv')

Null data.table (0 строк и 0 столбцов)
Предупреждающее сообщение:
В fread ("unzip -p df.zip/df1.csv"): Файл '/ var / папки / w5 / kqy78qb17v176195dtyyc4pj40000gn / T // RtmpIlNSk8 / filee1693cc7f89' имеет размер 0. Возвращает NULL data.table.

Я не понимаю, что он пытается импортировать, но это явно не мой интересующий фрейм данных.

Вы можете помочь?

Редактировать 1

Разархивировать сначала - не вариант. На практике я работаю с партиями файлов с высокой степенью сжатия. Обычно ~ 3000 файлов xls, каждый 1M строк. 100 Гб в разархивированном виде / 8 Гб в архиве. Излишне говорить, что было бы намного удобнее читать прямо с почтового индекса!

1
francoiskroll 12 Фев 2021 в 18:15

1 ответ

Лучший ответ

После установки unzip это решение работает на моем компьютере:

fread(cmd = 'unzip -p df.zip df1.csv')
                  V1  mpg cyl disp  hp drat    wt  qsec vs am gear carb
1:         Mazda RX4 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
2:     Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
3:        Datsun 710 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
4:    Hornet 4 Drive 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
5: Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
6:           Valiant 18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
3
Waldi 13 Фев 2021 в 07:02