如何使用startswith函数不指定全名从下载文件夹导入Zip文件
问题描述
我的下载文件夹中有一个Zip文件,其中包含名为“Query Transaction History_20221121040329_01.xls”的文件。此前我用以下代码手动指定完整文件名来解压导入:
unzip(zipfile = "C:/Users/Guest 1/Downloads/Query Transaction History_20221121040329_42118.zip", files = "Query Transaction History_20221121040329_01.xls", exdir=".")
我希望不用指定完整文件名,用R语言base包的startswith()函数或其他合适方法实现自动匹配解压,预期能像下面这种简化形式的代码一样工作:
unzip(zipfile = "C:/Users/Guest 1/Downloads/Query Transaction History_20221121.zip", files = "Query Transaction History_20221121.xls", exdir=".")
解决方案
可以通过以下步骤实现自动匹配文件名解压:
- 第一步:先用
unzip()的list = TRUE参数获取Zip包内的所有文件列表 - 第二步:用
startswith()筛选出以目标前缀开头的文件 - 第三步:将筛选出的文件名传入
unzip()完成解压
具体代码如下:
# 定义Zip文件路径 zip_path <- "C:/Users/Guest 1/Downloads/Query Transaction History_20221121040329_42118.zip" # 获取Zip包内的所有文件列表 zip_files <- unzip(zip_path, list = TRUE)$Name # 筛选出以"Query Transaction History_20221121"开头的文件 target_file <- zip_files[startswith(zip_files, "Query Transaction History_20221121")] # 解压目标文件 unzip(zipfile = zip_path, files = target_file, exdir = ".")
补充说明
- 如果Zip包内符合前缀的文件不止一个,
target_file会是一个向量,此时unzip()会把所有符合条件的文件都解压出来 - 也可以用
grepl()配合正则表达式来匹配,比如:
target_file <- zip_files[grepl("^Query Transaction History_20221121", zip_files)]
效果和startswith()一致,适合更复杂的匹配场景
内容的提问来源于stack exchange,提问作者Yomi.blaze93
相关产品推荐
相关产品推荐

