我正在寻找一种R解决方案或Python解决方案,以将数千个CSV文件合并为几个更大的文件,文件大小限制为1GB。我有几个脚本可以将一个文件夹中的所有CSV文件合并为一个CSV文件,但是这个文件可能太大而无法使用,因此我想合并10、11、12个文件或其他任何文件,最多约1GB,保存该文件,然后开始将多个剩余文件合并到大约1GB的第二个CSV文件中,再保存一个,依此类推。我在Google上搜索了一阵子,却找不到解决方案。如果有人可以帮助我,我将非常感激。 TIA!
我将多个CV文件合并为一个文件的代码如下所示。显然,有多种方法可以完成基本相同的事情,因此,我敢肯定,存在大多数相似但略有不同的方法来完成这种事情。
根据下面Shree的评论,我认为代码看起来像这样。
setwd("C:/Users/ryans/OneDrive/Desktop/test")
# assuming all files are in working directory
files <- list.files(pattern = ".csv")
file_sizes <- sapply(files, function(x) file.size(x)) # sizes in bytes
cum_sizes <- cumsum(file_sizes)
file_read_groups <- cut(cum_sizes, breaks = seq(0, max(cum_sizes), by = min(500000, max(cum_sizes))))
# code to read and combine CSV from each file group which you already have
txt_files <- list.files()
list_of_reads <- lapply(files, readLines)
for(i in 1:length(list_of_reads)){
df_of_reads <- data.frame(file_name = txt_files, contents = do.call(rbind, files))
write.csv(df_of_reads, "csv" + toString(i) + ".csv", row.names = F)
next
}
但是,该脚本引发了此错误消息。
Error in do.call(rbind, files) : second argument must be a list
我以为第二个参数是列表...
答案 0 :(得分:1)
考虑构建文件和元数据的数据框架。然后,运行<#list 0..(name?length-1) as idx>${name[idx]}.</#list>
以读取文件并按组保存。下面不保证文件大小相等,但会以1GB字节的块输出CSV文件。
by
答案 1 :(得分:0)
在我的评论之后,类似这样的事情应该可以解决-
# assuming all files are in working directory
files <- list.files(pattern = ".csv")
file_sizes <- sapply(files, function(x) file.size(x)) # sizes in bytes
cum_sizes <- cumsum(file_sizes)
file_read_groups <- cut(cum_sizes, breaks = seq(0, max(cum_sizes), by = min(1e9, max(cum_sizes))))
# code to read and combine CSV from each file group which you already have