You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用vroom读取远程归档文件时如何获取内部文件名而非归档名?

无需本地解压,用vroom读取远程归档并保留归档内文件名

需求说明

希望使用vroom读取远程归档文件时,添加一列存储归档内的文件名(而非归档文件本身的名称),且跳过本地archive_extract解压步骤。

解决方案

可以通过archive包的archive_read()函数直接读取远程归档内的单个文件,结合purrr::map_dfr循环处理所有归档内文件,同时手动绑定归档内文件名,无需本地解压:

library(tidyverse)
library(archive)
library(vroom)

# 远程归档文件地址
remote_archive <- "ftp://opendata.dwd.de/climate_environment/CDC/grids_germany/daily/regnie/ra2021m.tar"

# 获取归档内所有文件的路径列表
archive_contents <- archive(remote_archive) %>% pull(path)

# 遍历读取每个归档内文件,添加filename列并合并结果
final_data <- map_dfr(archive_contents, function(file_path) {
  # 直接从远程归档读取单个文件
  vroom_fwf(archive_read(remote_archive, file_path),
            col_positions = fwf_widths(rep(4, 611)),
            col_types = cols(.default = col_integer()),
            na = "-999") %>%
    # 添加归档内的文件名
    mutate(filename = file_path)
})

# 验证文件名列
final_data$filename %>% unique()

原理说明

  • archive(remote_archive):远程获取归档文件的目录结构,提取出所有内部文件的路径
  • archive_read(remote_archive, file_path):直接从远程归档中读取指定的单个文件,无需本地保存
  • map_dfr(...):循环处理每个内部文件,读取后添加文件名列,最终合并为一个完整的数据框

内容的提问来源于stack exchange,提问作者ckluss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 22:24:12