在R中读取zip文件而不知道其中的csv文件名

时间:2017-12-18 14:00:09

标签: r csv zip unzip read.table

我正在尝试读取一个包含1个csv文件的zip文件。

当我知道csv文件名时它很有用,但是当我尝试单独提取zip文件时,它不起作用。

以下是它的工作原理示例:

zip_file <- abc.zip
csv_file <- abcde.csv

data <- read.table(unz(zip_file,csv_file), skip = 10, header=T, quote="\"", sep=",")

当我尝试仅提取zip文件时,以下它不起作用:

read.table(zip_file, skip = 10, nrows=10, header=T, quote="\"", sep=",")

出现错误说:

Error in read.table(attachment_file, skip = 10, nrows = 10, header = T,  : 
  no lines available in input
In addition: Warning messages:
1: In readLines(file, skip) : line 2 appears to contain an embedded nul
2: In readLines(file, skip) : line 3 appears to contain an embedded nul
3: In readLines(file, skip) :
  incomplete final line found on 
'C:\Users\nickk\AppData\Local\Temp\RtmpIrqdl8\file2c9860d62381'

所以这表明肯定存在一个csv文件,因为它在我包含csv文件名时有效,但是当我只是执行zip文件时,则会出现错误。

对于上下文,我不想包含csv文件名的原因是因为我需要每天读取此zip文件,并且每次都没有模式更改csv文件的名称。所以我的目标是只读取zip文件以绕过它。

谢谢!

2 个答案:

答案 0 :(得分:3)

为什么不尝试使用unzip在ZIP存档中查找文件名:

zipdf <- unzip(zip_file, list = TRUE)
# the following line assuming the archive has only a single file
csv_file <- zipdf$Name[0]

your_df <- read.table(csv_file, skip = 10, nrows=10, header=T, quote="\"", sep=",")

答案 1 :(得分:0)

如果您对data.table开放,可以尝试:

data.table::fread(paste('unzip -cq', zip_file), skip = 10)
  • -c:uncompress to standout;
  • -q:禁止unzip;
  • 打印的邮件