每日自动解压带日期命名的Zip文件时遇R语言报错求助
解决R脚本动态匹配Zip文件解压报错问题
可能的报错原因
- 动态生成的文件名/路径与实际下载文件不匹配,导致
zip_files包含无效路径 - 日期格式不匹配(比如下载文件用
YYYYMMDD,而你生成的是YYYY-MM-DD) - 目标Zip文件损坏或无读取权限
分步解决方案
1. 排查zip_files的有效性
先确认你动态生成的文件列表是否正确:
# 替换为你的下载文件夹路径 download_dir <- "~/Downloads" # 替换为你实际需要的日期格式(比如下载文件是Query Transaction History_20240520.zip,就用%Y%m%d) date_str <- format(Sys.Date(), "%Y%m%d") # 用glue生成匹配模式,.*匹配日期后的任意字符(比如时分秒) file_pattern <- glue::glue("Query Transaction History_{date_str}.*\\.zip") # 列出符合模式的文件,full.names=TRUE确保返回完整路径 zip_files <- list.files(path = download_dir, pattern = file_pattern, full.names = TRUE) # 检查文件是否存在 print(zip_files) print(file.exists(zip_files))
如果输出有FALSE,说明文件名/格式不匹配,需要调整date_str的格式。
2. 修正日期格式匹配
常见的日期格式对应符:
%Y%m%d→ 20240520%Y-%m-%d→ 2024-05-20%Y%m%d%H%M→ 202405201430(带时分)
根据下载文件的实际命名调整format(Sys.Date(), ...)中的格式符,比如下载文件是Query Transaction History_2024-05-20_1430.zip,就用:
date_str <- format(Sys.Date(), "%Y-%m-%d") file_pattern <- glue::glue("Query Transaction History_{date_str}_.*\\.zip")
3. 修复ldply调用逻辑
ldply是用来返回数据框的,而unzip不需要返回数据,改用更合适的函数或调整参数:
# 方案1:调整ldply的匿名函数,明确传递zipfile参数并捕获错误 plyr::ldply(zip_files, function(file) { tryCatch( unzip(zipfile = file, exdir = my_dir), error = function(e) message("解压失败:", file, ",错误信息:", e$message) ) }) # 方案2:改用purrr包的walk函数(更简洁,适合无返回值的操作) library(purrr) walk(zip_files, ~unzip(zipfile = ., exdir = my_dir))
4. 其他排查点
- 手动解压目标Zip文件,确认文件未损坏
- 如果路径包含中文或特殊字符,设置系统编码(Windows系统):
Sys.setlocale(category = "LC_ALL", locale = "zh_CN.UTF-8")
- 确保有目标文件夹的写入权限
内容的提问来源于stack exchange,提问作者Yomi.blaze93
相关产品推荐
相关产品推荐

