簡體   English   中英

R 讀取 zip 數據文件而不解壓縮

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM