gpt4 book ai didi

regex - 使用 R,检索文件名包含某些字符串的文件

转载 作者:行者123 更新时间:2023-12-01 09:14:16 24 4
gpt4 key购买 nike

我有来自某个目录的数千个文件:

filenames <- list.files("D:/MessData_Source", pattern="*.DAT", full.names=TRUE)
.....
.....

[9998] "D:/MessData_Source/908-A0F7__01310012567794F.DAT"
[9999] "D:/MessData_Source/908-A0F7__01310015662858F.DAT"
[10000] "D:/MessData_Source/908-A0F7__01310015662859F.DAT"

....
....

在这 1000 多个文件中,我只需要提取文件名包含某些字符串的文件。
例如
filename_extracted <- list()
for (i in 1:length(filenames))
{
# search for those filenames that contain the strings with PartNo and MoNo and store in results
filename_extracted[[i]] <- substr(filenames[i],31,43)
}

上面我从数字 31 到 43 中提取文件名字符串并将其存储在 filename_extracted 中,如下所示:
 [[9993]]
[1] "1856955908850"

[[9994]]
[1] "1856955933372"

[[9995]]
[1] "1856955933372"

[[9996]]
[1] "1856955954613"

[[9997]]
[1] "1856955954613"

[[9998]]
[1] "1310012567794"

[[9999]]
[1] "1310015662858"

[[10000]]
[1] "1310015662859"

接下来,我需要将 filename_extracted 与我需要的列表进行比较,并将那些匹配的文件复制到另一个目录。
required_list <- list()
df <-read.csv("PartNo_MoNo.csv") # full set
for (i in 1:length(df))
{
required_list[[i]] <- paste(df[i,1],df[i,2], sep="")
}
> required_list
[[1]]
[1] "1235235987252"

[[2]]
[1] "1897865985468"

如果required_list和filename_extracted之间存在匹配,我想将匹配的文件复制到另一个目录,我该怎么做?

谢谢。

最佳答案

这是更新后的代码,完全矢量化:

filename_extracted = substr(filenames, start=31, stop=43)
prefix = substr(filesnames, start=20, stop=30)
required_list = paste0(df[,1], df[,2])

common_suffix = intersect(filename_extracted, required_list)
common_prefix = prefix[filename_extracted %in% common]

storeDir = "D:/MessData_Source"
otherDir = "D:/OrderedData_Source"

if(length(common!=0))
{
commonFile = paste0(common_prefix, common_suffix, ".DAT")

sapply(commonFile, function(u){
file.copy(file.path(storeDir,u), file.path(otherDir, u))
})
}

在执行此操作之前,请确保 otherDir被 build 。

关于regex - 使用 R,检索文件名包含某些字符串的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27896845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com