求助:R的archive包读取50GB+.7z文件元数据显示为空的解决方法
解决R的archive包读取大型7z文件元数据无内容的问题
以下是几个可行的解决方案,按优先级排序:
验证文件完整性
大型归档文件传输或存储时易损坏,先通过7z命令行工具验证文件:7z t your_large_file.7z若验证失败,先执行修复命令
7z r your_large_file.7z,再尝试读取。调整R的内存限制
RStudio默认内存配额可能不足以处理大文件的元数据解析,尝试扩大内存限制:# Windows系统 memory.limit(size = 64000) # 单位为MB,可根据实际调整 # Linux/macOS系统 memory.limit(size = Inf)调整后重新调用
archive()函数。使用archive包底层接口读取
高层的archive()函数可能对大文件有处理限制,尝试手动调用底层接口逐个读取条目:library(archive) # 打开归档文件 archive_handle <- archive_read_open_filename("your_large_file.7z") # 循环读取所有条目元数据 metadata_list <- list() i <- 1 repeat { entry <- archive_read_next_header(archive_handle) if (is.null(entry)) break metadata_list[[i]] <- data.frame( path = entry$path, size = entry$size, date = entry$mtime ) i <- i + 1 } # 关闭句柄并转换为数据框 archive_read_close(archive_handle) metadata_df <- do.call(rbind, metadata_list)用7z命令行导出元数据再导入R
若上述方法都失效,直接用7z工具导出元数据到文本文件,再在R中解析:- 执行命令行命令导出详细元数据:
7z l -slt your_large_file.7z > archive_metadata.txt - 在R中读取并解析文本:
# 读取文本 raw_metadata <- readLines("archive_metadata.txt") # 提取条目信息(可根据实际输出调整规则) entry_lines <- grep("^Path|^Size|^Modified", raw_metadata, value = TRUE) # 转换为数据框 metadata_df <- data.frame( path = gsub("Path = ", "", entry_lines[seq(1, length(entry_lines), 3)]), size = as.numeric(gsub("Size = ", "", entry_lines[seq(2, length(entry_lines), 3)])), date = as.POSIXct(gsub("Modified = ", "", entry_lines[seq(3, length(entry_lines), 3)]), format = "%Y-%m-%d %H:%M:%S") )
- 执行命令行命令导出详细元数据:
内容的提问来源于stack exchange,提问作者Đàm Đức Nghĩa Nguyễn
相关产品推荐
相关产品推荐

