【问题标题】:How to get rid of file extensions (.CSV) in a file name that is generated by R如何摆脱 R 生成的文件名中的文件扩展名 (.CSV)
【发布时间】:2011-08-22 16:21:08
【问题描述】:

我的工作文件夹中有一系列 .csv 文件,我编写了一个代码来获取所有这些文件,对它们做我想做的所有事情,最后,将结果写入另一个文件,将“_pp”添加到原文件名:

random <- grep(".csv",list.files(), fixed=TRUE)                             
files <- list.files()[random]   
for (igau in 1:length(files))                                               
{
(.......)
file <- paste("H:/METEO_data/AEMET_2/",files[igau],"_pp.csv",sep="")
write.table(d,file,row.names=TRUE, col.names=NA, sep=" ")                   
}

问题是当我想要的是“3059_pp.csv”时,我得到了“3059.csv_pp.csv”。有没有办法取出第一个 .csv?

谢谢

【问题讨论】:

  • 提示:使用seq_along(files) 而不是1:length(files)。当没有找到文件时,第一个是numeric(0)(并且循环什么都不做),第二个是1:0=c(1,0),你会得到随机效果(例如,在你的情况下它将写入两个文件:"H:/METEO_data/AEMET_2/NA_pp.csv""H:/METEO_data/AEMET_2/_pp.csv")。

标签: r csv filenames


【解决方案1】:

您的前两行可以简化为一个使用pattern 参数的list.files 调用。然后您可以使用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=" ")
}

您也可以遍历files 中的元素,但前提是您不需要igau 索引来处理其他任何事情。并且为了避免将来让自己感到困惑,您可能希望避免使用 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=" ")
}

【讨论】:

  • 要涵盖所有奇怪的情况,应该有list.files(pattern="\\.csv$"). 表示“任何字符”)和sub("\\.csv$", "_pp.csv", File))
【解决方案2】:

问题在于files[igau] 包含.csv 扩展名。你必须这样做:

basefile <- strsplit(files[igau], ".")
file <- paste("H:/METEO_data/AEMET_2/",basefile[0],"_pp.csv",sep="")

basefile[0] 将包含第一个 . 之前的所有内容。这意味着如果您的文件名中包含点(即3059.2.csv),此代码将中断。如果是这种情况,那么您必须将 paste() 中的所有内容放在一起,除了最后一个元素,即您要删除的 csv

【讨论】:

  • 我决定尝试 gsub,这样带点的文件名就不会成为问题,但还是感谢您的回答
猜你喜欢
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 2017-06-29
  • 1970-01-01
相关资源
最近更新 更多