繁体   English   中英

使用R读取多个cs3中的csv文件并将它们组合为单个文件

[英]reading multiple csv files in s3 and combined them as a single file when the name of files are different using R

每天我都有多个具有不同名称的csv文件,并且我想将每一天中的所有CSV合并为一个文件,并在以后的几天中将其放入循环中。

   path= 's3://data/ y= 2017 /m= 05'

在m = 05中,我有多个具有不同名称的csv文件(大约200个),在其他日子(例如m = 06)中,我有120个csv文件。

dates<- seq(as.Date('2017-05-05'), as.Date('2017-06-10'), "days")
for (i in 1:length(dates)){
dateofgen<-dates
filepath <- paste(path, "y=", format(as.Date(dateofgen), '%Y'), "/m=", format(as.Date(dateofgen), '%m'),"/d=",format(as.Date(dateofgen),'%d'), "/part-00012-e731138c-232c-48b0-958f-55f2c72f3327-c000.csv", sep='')
data <- s3read_using(read.csv, object=filepath, stringsAsFactors = F, bucket=gsub("/.*", '', gsub("s3://", '', filepath)))
}

如何使用rbind或任何合并功能将一天中的所有文件读取并合并为一个文件。

    library(readxl)
    library(dplyr)

这将获取工作目录中所有.xls文件的名称。 您也可以使用“ * .csv”

    file.list <- list.files(path = 's3://data/ y= 2017 /m= 05', pattern='*.xls')

这将创建文件的嵌套列表。

    df.list <- lapply(file.list, read_excel)

这会将所有内容从嵌套列表中拉出并将所有行绑定在一起。

    tibble_of_your_xls_files <- bind_rows(df.list)

对于您的代码,我将运行:

    file.list <- list.files(path = 's3://data/ y= 2017 /m= 05', pattern='*.csv')
    df.list <- lapply(file.list, read_excel)
    m052017.df <- bind_rows(df.list)

我们将使用get_bucket_df方法访问存储桶中的对象,然后使用ldply函数遍历每个月中不同日期的所有对象,并使用s3read_using()读取s3对象。

days=as.character(c('17','18','19','20','21','22','23','24','25','26','27','28','29','30','31'))
​
for (i in 01:31){
  path <- paste0("s3://data/ y= 2017 /m= 05/d=",days[i],sep = "")
  temp_df <- get_bucket_df(bucket = "data", prefix = path)
  temp_df <- temp_df[which(grepl(".csv", temp_df$Key)),]
  new_data <- ldply(temp_df$Key, function(x){
    s3path <- paste('s3://pa-datastore/',x,sep = "")
    raw_data <- s3read_using(read.csv, na.strings = '', header = FALSE, object = s3path, stringsAsFactors = F, bucket=gsub("/.*", '', gsub("s3://", '', s3path)))
    raw_data
  })
  dateofgen <- as.Date(paste0("2017-06-", days[i], sep = ""))
  new_path <- "s3://data/"
  filepath <- paste(new_path, "y=", format(as.Date(dateofgen), '%Y'), "/m=", format(as.Date(dateofgen), '%m'), "/newfile", dateofgen, ".csv", sep='')
  s3write_using(new_data, FUN=write.csv, row.names = F, object = filepath, bucket = gsub("/.*", '', gsub("s3://", '', filepath)))
base::print(paste0("completed for ", dateofgen, sep =""))
}
​

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM