r-通过保留前6个字符重命名多个文件



如何将文件名从Pbs_d7_s2_juliam_08July2020_02_1_0_live singlets.fcs重命名为Pbs_d7_s2.fcs

对于多个文件,请记住_juliam_08July2020_02_1_0_live singlets并非适用于所有文件?

您的要求有点不清楚,但看起来您只想保留第三个下划线之前的块。如果是这样的话,你可以用正则表达式来解决这个问题。正则表达式

str_extract(input_string, "^(([^_])+_){3}")

将去掉以下划线结尾的前3个字符块(不是下划线(。第一个^"锚";与字符串开头的匹配;[^_]+_"匹配下划线前任意数量的非下划线字符。{3}执行前面的操作3次。

所以对于";Pbs_d7_2_juliam_08July2020_02_1_0_带电单线图.fcs";你最终会得到";Pbs_ d7_2_;。现在您只需将最后一个下划线替换为";。fcs";像这样

str_replace(modified string, "_$", ".fcs")

$";"锚";字符串末尾之前的字符,因此在本例中,它将替换最后一个下划线。完整的序列是

string1<- "Pbs_d7_s2_juliam_08July2020_02_1_0_live singlets.fcs" 
str_extract(string1, "^(([^_])+_){3}") %>%
str_replace("_$",".fcs")
[1] "Pbs_d7_s2.fcs"

现在让我们假设您的文件名在一个名为stringvec的向量中。

output <- vector("character",length(stringvec))
for (i in seq_along(stringvec)) {
output[[i]] <- str_extract(stringvec[[i]],"^(([^_])+_){3}")%>% 
str_replace("_$",".fcs")
}
output

我在这里做了一些假设,即所有文件的命名约定都是相同的。如果不是这样,您将需要找到修改regex搜索模式的方法。

我推荐这个答案如何使用R重命名文件?用于替换文件名的矢量。如果你有一个原始文件名的向量,你可以使用我的for循环来生成一个新名称的向量,然后你可以使用链接中的信息来用另一个替换一个。也许还有其他不涉及循环的解决方案。

最新更新