从存档文件中读取文件的fread()函数

19

我想知道从一个存档文件 (在我的情况下是 zip 存档) 中读取 data.table 的推荐方法是什么。一种明显的选项是将其解压缩到临时文件中,然后像平常一样使用 fread() 进行读取。我不想为创建新文件而烦恼,所以我使用 unz() 连接的 read.table(),然后用 data.table() 进行转换:

mydt <- data.table(read.table(unz(myzipfilename, myfilename)))

这个方法运行良好,但是对于大文件而言,read.table() 的速度较慢,同时 fread() 无法直接读取 unz() 连接。我想知道是否有更好的解决方案。


你可以看一下 Hadley Wickham 的 readr 包中的 read_file 函数。我发现它比基本的 R 读取未压缩文件更快,文档也表明它可以读取压缩文件。 - WaltS
1个回答

28

查看:使用fread读取压缩的CSV文件 为避免临时文件,您可以使用unzip和-p选项将文件提取到管道中,无需消息。

您可以在fread中使用这种语句。

x = fread('unzip -p test/allRequests.csv.zip')

或者使用gunzip

x = fread('gunzip -cq test/allRequests.csv.gz')

你也可以使用grep或其他工具。


3
当使用预处理命令时,值得注意的是data.table开发人员建议使用cmd参数,例如fread(cmd = 'unzip -p test/allRequests.csv.zip'),出于安全原因。 - Taz
1
我必须将我的 unzip.exe 文件复制到我的工作 R 目录中才能使其正常工作。 - kakarot
解压或解压缩必须在$PATH中。 - Mirko Ebert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接