![](/img/trans.png)
[英]R Reading in a zip data file without unzipping it (loss of information)
[英]R Reading in a zip data file without unzipping it
我有一個非常大的 zip 文件,我試圖將它讀入 R 而不像這樣解壓縮:
temp <- tempfile("Sales", fileext=c("zip"))
data <- read.table(unz(temp, "Sales.dat"), nrows=10, header=T, quote="\"", sep=",")
Error in open.connection(file, "rt") : cannot open the connection
In addition: Warning message:
In open.connection(file, "rt") :
cannot open zip file 'C:\Users\xxx\AppData\Local\Temp\RtmpyAM9jH\Sales13041760345azip'
如果您的 zip 文件名為Sales.zip
並且只包含一個名為Sales.dat
的文件,我認為您可以簡單地執行以下操作(假設該文件在您的工作目錄中):
data <- read.table(unz("Sales.zip", "Sales.dat"), nrows=10, header=T, quote="\"", sep=",")
無需使用 unz,因為現在 read.table 可以直接處理壓縮文件:
data <- read.table("Sales.zip", nrows=10, header=T, quote="\"", sep=",")
看到這個帖子
如果文件后綴表明文件的性質, readr
包的方法也支持壓縮文件,即以 .gz、.bz2、.xz 或 .zip 結尾的文件將被自動解壓縮。
require(readr)
myData <- read_csv("foo.txt.gz")
如果文件是 sales.csv,這應該可以正常工作。
data <- readr::read_csv(unzip("Sales.zip", "Sales.csv"))
在不提取文件的情況下檢查文件名。 這有效
unzip("sales.zip", list = TRUE)
如果您的系統上安裝了 zcat(Linux、macos 和 cygwin 就是這種情況),您還可以使用:
zipfile<-"test.zip"
myData <- read.delim(pipe(paste("zcat", zipfile)))
此解決方案還具有不創建臨時文件的優點。
在這個表達中你失去了一個點
temp <- tempfile("Sales", fileext=c("zip"))
它應該是:
temp <- tempfile("Sales", fileext=c(".zip"))
gzfile 函數連同 read_csv 和 read.table 可以讀取壓縮文件。
library(readr)
df = read_csv(gzfile("file.csv.gz"))
library(data.table)
df = read.table(gzfile("file.csv.gz"))
即使不使用 gzfile 函數,readr 包中的 read_csv 也可以讀取壓縮文件。
library(readr)
df = read_csv("file.csv.gz")
推薦使用 read_csv 因為它比 read.table 快
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.