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

R语言实现从互联网下载解压文件至临时目录并导入CSV

关于从临时目录处理StatCan压缩CSV文件的代码正确性验证

我正在用R开发脚本,需要实现从互联网下载压缩文件夹、解压后导入指定CSV文件到R环境。因为文件体积大,希望把文件存在临时目录,重启电脑后自动删除。

相关信息:

  • 目标CSV文件名:98-401-X2021012_English_CSV_data.csv

临时目录示例:

> tempfile()
[1] "C:\\Users\\me\\AppData\\Local\\Temp\\RtmpMzoYjA\\file4d2c5123acd"

我编写的代码如下:

# 设置压缩CSV文件的URL
url <- "https://www12.statcan.gc.ca/census-recensement/2021/dp-pd/prof/details/download-telecharger/comp/GetFile.cfm?Lang=E&FILETYPE=CSV&GEONO=012"

# 设置临时文件路径
temp_file_path <- tempfile(fileext = ".zip")

# 从URL下载文件到临时文件
download.file(url, destfile = temp_file_path, mode = "wb")

# 将文件解压到临时目录
temp_dir <- tempdir()
unzip(temp_file_path, exdir = temp_dir)

运行代码后查看临时目录内容:

> list.files(temp_dir)
[1] "98-401-X2021012_English_CSV_data.csv"             "98-401-X2021012_English_meta.txt"                 "98-401-X2021012_Geo_starting_row.CSV"            
[4] "README_meta.txt"                                  "rs-graphics-a29a9849-423f-45db-8310-475e45964e33"

随后尝试导入目标CSV文件:

test <- read.csv(file.path(temp_dir, "98-401-X2021012_English_CSV_data.csv"))

你的代码整体逻辑是完全正确的,理由如下:

  1. 用tempfile(fileext = ".zip")创建带.zip后缀的临时文件,既符合下载压缩包的格式需求,又能保证文件存放在系统临时目录,重启后自动清理,完美匹配你的需求。
  2. download.file使用mode = "wb"模式下载二进制压缩文件,避免了Windows系统下可能出现的文件损坏问题,这一步考虑很周全。
  3. 通过tempdir()获取R的临时目录根路径,将压缩包解压到该目录,从list.files的输出可以确认,目标CSV已经成功解压到指定位置。
  4. 最后用file.path拼接路径导入CSV,避免了不同操作系统路径分隔符的兼容问题,写法规范。

可选优化建议

  • 可以在导入前增加文件存在性检查,避免因解压异常导致后续报错:
target_csv <- file.path(temp_dir, "98-401-X2021012_English_CSV_data.csv")
if (!file.exists(target_csv)) {
  stop("目标CSV文件未找到,请检查压缩包内容或下载是否成功")
}
test <- read.csv(target_csv)
  • 针对大体积CSV文件,推荐使用readr::read_csv替代基础包的read.csv,读取速度更快且内存使用效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:18:35