2016-08-18 3 views
2

Я был в состоянии создать код в R для пакетного формиата все мои .txt файл .csv файлов с помощьюизменение .txt в .csv в R

setwd("~/Desktop/test/") 
filelist = list.files(pattern = ".txt") 
for (i in 1:length(filelist)){ 
    input<-filelist[i] 
    output<-paste0(input, ".csv") 
    print(paste("Processing the file:", input)) 
    data = read.delim(input, header = TRUE) 
    setwd("~/Desktop/test/done/") 
    write.table(data, file=output, sep=",", col.names=TRUE, row.names=FALSE) 
    setwd("~/Desktop/test/") 
} 

прекрасно работает, но файл по-прежнему сохраняет .txt расширение в имени Пример origninal file = "sample1.txt", а затем новый файл говорит «sample1.txt.csv». Файл работает как .csv, но дополнительный «.txt» в имени файла меня раздражает, кто-то знает как удалить его из названия? благодаря

+0

Оригиналы текстовые файлы также имеют дополнительные '.txt' как в' sample1.txt.txt'. Поэтому я предполагаю, что ваш 'input' имеет' sample1.txt.txt', а затем через код он показывает вам 'sample1.txt.csv' Вы вводите имена файлов с дополнительным' .txt', поэтому он также появляется на выходе, так как вы сказали в 'output', что' paste0 (input, '.csv') ' –

+1

Изменить' output <-paste0 (input, ".csv") 'to' output <-paste0 (strsplit (input, '\\.') [[1]] [1], «.csv») 'или что-то в этом роде ... –

+0

@ Ответ KarstenW. Ниже - более чистый :) –

ответ

5

Вы можете удалить ненужные .txt:

output <- paste0(gsub("\\.txt$", "", input), ".csv") 

обратных косые помечает точку как буквальная точка (она имеет другое значение в регулярных выражениях, если не отмечено). Обратная косая черта должна быть удвоена, потому что R пытается избежать одиночной обратной косой черты. Знак доллара представляет собой конец строки, поэтому удаляется только «.txt» в конце имени файла.

+0

Удивительная благодарность за код и объяснение отлично работает – StevenL

1
write.table(filelist,file=paste0("~/Desktop/test/done/",sub(".txt","",filelist[i]),".csv"),row.names=F,colnames=T,quote=F,sep=",") 

Альтернативная помощь:

setwd("~/Users/Rio/Documents/Data/") 
FILES <- list.files(pattern = ".txt") 

for (i in 1:length(FILES)) { 
FILE=read.table(file=FILES[i],header=T,sep="\t") 
write.table(FILE,file=paste0("~Users/Rio/Documents/Data/",sub(".txt","",FILES[i]),".csv"),row.names=F,quote=F,sep=",") 
}