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"))
你的代码整体逻辑是完全正确的,理由如下:
- 用
tempfile(fileext = ".zip")创建带.zip后缀的临时文件,既符合下载压缩包的格式需求,又能保证文件存放在系统临时目录,重启后自动清理,完美匹配你的需求。 download.file使用mode = "wb"模式下载二进制压缩文件,避免了Windows系统下可能出现的文件损坏问题,这一步考虑很周全。- 通过
tempdir()获取R的临时目录根路径,将压缩包解压到该目录,从list.files的输出可以确认,目标CSV已经成功解压到指定位置。 - 最后用
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
相关产品推荐
相关产品推荐

