【问题标题】:Manipulating temporary file paths操作临时文件路径
【发布时间】:2015-05-17 09:51:25
【问题描述】:

我在tempdir() 中有一个不同临时路径上的文件列表。这里给出了路径,/tmp/Rtmp9pF0OF 是我的 R 会话的tempdir()

[1] "/tmp/Rtmp9pF0OF/4fc42cb004a7160951778110/0"  "/tmp/Rtmp9pF0OF/4fc42cb004a7160951778110/1" 
 [3] "/tmp/Rtmp9pF0OF/4fc42cb004a7160951778110/2"  "/tmp/Rtmp9pF0OF/4fc42cb004a7160951778110/3" 
 [5] "/tmp/Rtmp9pF0OF/4fc42cb004a7160951778110/4"  "/tmp/Rtmp9pF0OF/4fc42cb004a7160951778110/5" 
 [7] "/tmp/Rtmp9pF0OF/4fc42cb004a7160951778110/6"  "/tmp/Rtmp9pF0OF/4fc42cb004a7160951778110/7" 
 [9] "/tmp/Rtmp9pF0OF/4fc42cb004a7160951778110/8"  "/tmp/Rtmp9pF0OF/4fc42cb004a7160951778110/9" 
[11] "/tmp/Rtmp9pF0OF/4fc42cb004a7160951778110/10" "/tmp/Rtmp9pF0OF/4fc42cb004a7160951778110/11"
[13] "/tmp/Rtmp9pF0OF/4fc42cb004a7160951778110/12" 

这里给出了我本地目录中的文件名

 "1.txt" "2.txt" "3.txt""4.txt" "GSM248238.CEL" "GSM248650.CEL"
 "GSM248651.CEL" "GSM248652.CEL" "GSM248653.CEL" "GSM248655.CEL" "GSM248659.CEL" "GSM248660.CEL""GSM248661.CEL"

我想通过将文件名更改为上述向量中给出的名称来操作tempdir() 中的文件路径。说这样的话。

[1] "/tmp/Rtmp9pF0OF/1.txt"          "/tmp/Rtmp9pF0OF/2.txt" 
[3] "/tmp/Rtmp9pF0OF/3.txt"          "/tmp/Rtmp9pF0OF/4.txt" 
[5] "/tmp/Rtmp9pF0OF/GSM248238.CEL"  "/tmp/Rtmp9pF0OF/GSM248650.CEL" 
[7] "/tmp/Rtmp9pF0OF/GSM248651.CEL"  "/tmp/Rtmp9pF0OF/GSM248652.CEL" 
[9] "/tmp/Rtmp9pF0OF/GSM248653.CEL"  "/tmp/Rtmp9pF0OF/GSM248655.CEL" 
[11]"/tmp/Rtmp9pF0OF/GSM248659.CEL" "/tmp/Rtmp9pF0OF/GSM248660.CEL"
[13]"/tmp/Rtmp9pF0OF/GSM248661.CEL" 

谢谢。

【问题讨论】:

  • 如果你只想连接tempdir()filenames,你可以使用file.pathfile.path(tempdir(), filenames))
  • @lukeA 是否也包含文件的内容。
  • R 如果我也可以控制随机文件名的生成,那也可以。
  • @lukeA 因为本地目录中的第一个文件的名称是1.txt,但在临时路径上它会更改为4fc42cb004a7160951778110/0,对于其他文件也是同样的情况。我不能将文件的名称称为1.txt,因为名称1.txt 不会在临时路径上退出。所以我想恢复临时路径上的文件名。
  • 您似乎创建了临时目录,而不是文件。例如,要将所有文件从当前工作目录复制到临时目录,可以使用fns <- list.files(getwd(), full.names = TRUE); file.copy(from = fns, to = tempdir()); intersect(basename(fns), list.files(tempdir())) # check

标签: r filenames filepath tempdir


【解决方案1】:

这是一种通过查看 MD5 哈希来将一个目录中的文件名与临时目录中的文件名匹配的方法:

# create sample data: 5 named files in working dir, 5 in temp dir
set.seed(1)
txts <- replicate(5, paste(sample(letters, 10, T), collapse = ""))
for (x in seq_along(txts)) {
  writeLines(txts[x], paste0(txts[x], ".txt"))
  writeLines(txts[x], tempfile(fileext = ".txt"))
}

# match file names from working and temp dir by MD5 hashes
library(tools)
src <- md5sum(list.files(getwd(), pattern = "^[a-z]{10}\\.txt$")) 
trg <- md5sum(list.files(tempdir(), full.names = TRUE)) 
m <- match(trg, src)

# rename files in tempdir 
file.rename(names(trg[!is.na(m)]), file.path(tempdir(), names(src[m[!is.na(m)]])))

# open temp dir in windows to check, if file names correspond to file contents (= it worked)
shell.exec(tempdir()) 

【讨论】:

    猜你喜欢
    • 2012-04-11
    • 1970-01-01
    • 2012-08-19
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    相关资源
    最近更新 更多