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

每日自动解压带日期命名的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:35:19