Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中读取zip文件而不知道其中的csv文件名_R_Csv_Zip_Unzip_Read.table - Fatal编程技术网

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

在R中读取zip文件而不知道其中的csv文件名,r,csv,zip,unzip,read.table,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=",") 出现了一个错误,它说: Error in read.tab

我正在尝试读取一个包含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=",")
出现了一个错误,它说:

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文件来绕过这个问题


谢谢

为什么不尝试使用
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=",")

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

data.table::fread(paste('unzip -cq', zip_file), skip = 10)
  • -c
    :解压缩以突出显示
  • -q
    :抑制由
    解压打印的消息
    
您不需要专门为解压文件(请参阅
文件
说明)。尝试:
data可能通过
unzip(zip\u文件,list=TRUE)
获取文件名,然后将该文件名用作变量csv\u文件。@Florian效果很好!
data.table::fread(paste('unzip -cq', zip_file), skip = 10)