I have a series of .csv files in my working folder and I wrote a code to get them all, do everything I want to do with them and, in the end, write the result in another file adding "_pp" to the original file name:
random <- grep(".csv",list.files(), fixed=TRUE)
files <- list.files()[random]
for (igau in 1:length(files))
{
(.......)
file <- pas开发者_C百科te("H:/METEO_data/AEMET_2/",files[igau],"_pp.csv",sep="")
write.table(d,file,row.names=TRUE, col.names=NA, sep=" ")
}
the problem is that I get "3059.csv_pp.csv" when what I wanted was "3059_pp.csv". Is there a way of taking the first .csv out?
thanks
Your first two lines can be simplified to one list.files
call that uses the pattern
argument. Then you can change the output file name using gsub
.
files <- list.files(pattern=".csv")
for(i in 1:length(files)) {
outFile <- file.path("H:/METEO_data/AEMET_2",
gsub(".csv", "_pp.csv", files[igau]))
write.table(d, outFile, row.names=TRUE, col.names=NA, sep=" ")
}
You could also loop over the elements in files
, but that assumes you don't need the igau
index for anything else. And in order to potentially avoid confusing yourself in the future, you may want to avoid using file
for variable names because it's base package function that opens a connection to a file.
for(File in files) {
outFile <- file.path("H:/METEO_data/AEMET_2",
gsub(".csv", "_pp.csv", File))
write.table(d, outFile, row.names=TRUE, col.names=NA, sep=" ")
}
The problem is that files[igau]
contains the .csv
extension. You'll have to do something like this:
basefile <- strsplit(files[igau], ".")
file <- paste("H:/METEO_data/AEMET_2/",basefile[0],"_pp.csv",sep="")
basefile[0]
will contain everything before the first .
. This means that this code will break if you have filenames with dots in them (i.e. 3059.2.csv
). If this is the case, then you'll have to paste()
together everything in basefile
except for the last element, which will be the csv
that you're trying to get rid of.
精彩评论