使用关键字在目录中定位正确的文件并在 R 中进行比较
Locating right file in the directory with keywords and comparison in R
我是 r 的新手,我没有使用正则表达式的经验,非常感谢任何帮助。
我正在阅读 dir
,我正在尝试查找编号为“22953”的文件,然后我想阅读包含该文件的最新文件。日期也写在文件名中。
目录中的文件:
inv_22953_20190828023258_112140.csv
inv_22953_20190721171018_464152.csv
inv_8979_20190828024558_112140.csv
我在这里遇到的问题是,我不能真正依赖字符串的位置来获取日期,因为如您所见,某些文件的字符可能较少,这就是为什么解决方案可能是定位2号和3号之间的日期。
filepath <- "T:/Pricing/Workstreams/Business Management/EU/01_Operations/02_Carveouts/05_ImplementationTest/"
list.files(filepath)[which.max(suppressWarnings(ymd_hm(substr(list.files(filepath, pattern="_22953"),11,22))))]```
library(lubridate)
# First find the files with 22953 inside
myFiles <- grep("22953", list.files(filepath), value = T)
# Then, isolate the date and which file has the newest (maximum) date:
regex <- "^.*_.*_([0-9]{4})([0-9]{2})([0-9]{2}).*\.csv$"
myFiles[which(as_date(sub(regex, "\1-\2-\3", myFiles)) == max(as_date(sub(regex, "\1-\2-\3", myFiles))))]
正则表达式的解释
- ^ 匹配字符串的开头(表示 "whatever comes next is the beginning")
- .* 匹配任何内容 0 次以上
- _ 匹配下划线
- [0-9]{4} 找到 4 个介于 0 和 9 之间的数字
- [0-9]{2} 找到 2 个介于 0 和 9 之间的数字
- 捕获括号之间的内容用于替换字符串
- \\1指括号内第一组,\\2指第二组,\\3指第三组
- $ 指的是字符串的结尾(表示 "the end of the string ends in .csv")
我是 r 的新手,我没有使用正则表达式的经验,非常感谢任何帮助。
我正在阅读 dir
,我正在尝试查找编号为“22953”的文件,然后我想阅读包含该文件的最新文件。日期也写在文件名中。
目录中的文件:
inv_22953_20190828023258_112140.csv
inv_22953_20190721171018_464152.csv
inv_8979_20190828024558_112140.csv
我在这里遇到的问题是,我不能真正依赖字符串的位置来获取日期,因为如您所见,某些文件的字符可能较少,这就是为什么解决方案可能是定位2号和3号之间的日期。
filepath <- "T:/Pricing/Workstreams/Business Management/EU/01_Operations/02_Carveouts/05_ImplementationTest/"
list.files(filepath)[which.max(suppressWarnings(ymd_hm(substr(list.files(filepath, pattern="_22953"),11,22))))]```
library(lubridate)
# First find the files with 22953 inside
myFiles <- grep("22953", list.files(filepath), value = T)
# Then, isolate the date and which file has the newest (maximum) date:
regex <- "^.*_.*_([0-9]{4})([0-9]{2})([0-9]{2}).*\.csv$"
myFiles[which(as_date(sub(regex, "\1-\2-\3", myFiles)) == max(as_date(sub(regex, "\1-\2-\3", myFiles))))]
正则表达式的解释
- ^ 匹配字符串的开头(表示 "whatever comes next is the beginning")
- .* 匹配任何内容 0 次以上
- _ 匹配下划线
- [0-9]{4} 找到 4 个介于 0 和 9 之间的数字
- [0-9]{2} 找到 2 个介于 0 和 9 之间的数字
- 捕获括号之间的内容用于替换字符串
- \\1指括号内第一组,\\2指第二组,\\3指第三组
- $ 指的是字符串的结尾(表示 "the end of the string ends in .csv")