如何使用R中列表列中的名称重命名文件夹中的文件列表

时间:2019-07-22 17:47:04

标签: r

我正在尝试在文件夹中使用.txt扩展名重命名文件,并在表的列中使用相应的名称列表。该表包含两个向量,第一个是文件夹中文件名的标题,第二个是我希望保留原始扩展名的实际名称。我可以使用文件重命名,但是如何在相应的行中将其替换为新名称?

我尝试过使用带有file.rename的循环,除了我的代码遍历每个文件夹中表中的所有新名称之外。不确定是否有R函数可以做到这一点。

library(dplyr)
library(stringr)

headers <- read.csv(file="/mnt/data/Development/Sequences/SampleSheet.csv", skip = 18, header = F, nrows =1, as.is = T)

sample.rows = read.csv(file="/mnt/data/Development/Sequences/SampleSheet.csv", skip = 19, header = F)

colnames(sample.rows) = headers

old.new.names <- select(sample.rows, Sample_Name, Description)

startingDir<-"/mnt/data/Development/Sequences"

tcr.sample <- list.files(path=startingDir, pattern="txt", full.names=TRUE )

new.names <- select(old.new.names, Description)

file.rename(list.files(tcr.sample, pattern = ".txt" replacement=new.names)

该文件夹中的文件具有通用名称:S01_S1.txtS02_S2.txt等。我还有一个文件,其中包含带有2列的表。第一列通过前三个字符标识每个文件,例如S05,S06,... S45。第二列具有该行中文件的相应新名称,例如RK_ci1151_01,RK_ci1151_02,... RK_ci1151_Baseline。我正在尝试重命名文件,以便将名称更改为RK_ci1151_01.txt,RK_ci1151_02 ..等等。

我也得到了

Error in file.rename(tcr.sample, pattern=".txt", replacement=new.names) : unused arguments (pattern = ".txt, replacement=new.names)

消息。

2 个答案:

答案 0 :(得分:0)

我认为您可以使用其他方法来实现文件重命名。如果CSV文件列出了所需的唯一文件名,并且它们与唯一的“分组”变量关联(在您的情况下,“ S01”与文件RK_ci1151_01,RK_ci1151_02,RK_ci1151_Baseline关联),则可以使用新名称来重新创建旧名称。换句话说,您可以用旧文件名的模式替换新文件名中“ _01.txt”,“ _ 02.txt”等之前的模式。然后将数据框的列用作from=调用中的to=file.rename参数。

### prep toy data
# create df with old and new names
df <- data.frame(old=paste0(rep(letters[1:3],each=3),
                            '_', rep(c(0:2),3), '.txt'),
                 new=paste0(rep(c('foo','bar','hello'),each=3),
                            '_', rep(c(0:2),3), '.txt'),
                 stringsAsFactors = F)

# write files with old names
for (i in 1:length(df$old)) {
  write.table(NULL,df$old[i])
}

list.files(pattern='\\.txt')

[1] "a_0.txt" "a_1.txt" "a_2.txt" "b_0.txt" "b_1.txt" "b_2.txt" "c_0.txt" "c_1.txt" "c_2.txt"

# edit old names to match user code
df$old <- sub('_[0-9]\\.txt','',df$old)

> df
  old         new
1   a   foo_0.txt
2   a   foo_1.txt
3   a   foo_2.txt
4   b   bar_0.txt
5   b   bar_1.txt
6   b   bar_2.txt
7   c hello_0.txt
8   c hello_1.txt
9   c hello_2.txt

# separate new file names to join with old
df$join <- sub('.*(_[0-9]\\.txt)','\\1',df$new)
df$old1 <- paste0(df$old,df$join)

# rename
file.rename(df$old1, df$new)
list.files(pattern='\\.txt')

[1] "bar_0.txt"   "bar_1.txt"   "bar_2.txt"   "foo_0.txt"   "foo_1.txt"   "foo_2.txt"  
[7] "hello_0.txt" "hello_1.txt" "hello_2.txt"

答案 1 :(得分:0)

xgbc = xgb.XGBClassifier(**params)
ova_xgbc = OneVsRestClassifier(xgbc)
ova_xgbc.fit(X_train, y_train)

ova_preds = ova_xgbc.predict(X_val)