簡體   English   中英

如何使用 R 移動多個順序文件名(wav 文件,來自生物聲學監測)中的時間戳

[英]How to shift timestamps in multiple sequential file names (wav files, from bioacoustic monitoring) using R

我部署了被動錄音機來檢測動物的叫聲,但在我的一台設備上,日期和時間設置變得混亂並恢復為默認設置(2000 年 1 月 1 日)。 然后設備記錄了一個月,寫了 20 分鍾的文件,帶有日期和時間戳。 例如,文件名為 swift1_20000101_020000.wav (deviceName_YYYYMMDD_HHMMSS)。 現在我真的不想手動重命名 2000 多個單獨的文件。

我從我的現場筆記中知道實際的開始日期和時間,我想知道是否有一種方法可以輸入實際的開始日期/時間並讓所有文件都移開。 所以 swift1_20000101_000000 會變成 swift1_20220617_093000, swift1_20000101_002000 會變成 swift1_20220617_095000,依此類推。

有任何想法嗎? 我知道您可以使用 file.rename()、paste0() 等重命名文件,但我需要一個函數來按順序迭代目錄中的所有文件,但我無法找到可以做到這一點的東西。 任何想法或想法將不勝感激!

聽起來您想將 8203 天、9 小時和 30 分鍾添加到每個文件名中隱含的日期/時間。 嘗試這個。 假設您正在更新當前目錄中的所有文件。

library(lubridate)
library(stringr)     
              
  files <- list.files(getwd())     
  
  for(f in 1:length(files)){
      x <- files[f]
      orig <- ymd_hms(paste0(substr(x, 8, 11),"-",substr(x,12,13),"-",substr(x,14,15)," ",
                             substr(x, 17,18),":",substr(x, 19,20),":", substr(x, 21,22)))
      y <- as.character(orig + days(8203) + hours(9) + minutes(30))
      new <- paste0("swift1_", str_replace(str_remove_all(y, "-|:"), " ","_"),".wav")
      file.rename(from = x, to = new)
      
  }
  

首先,我們從目錄中獲取所有文件名。 然后對於每個文件,我們提取日期組件,組合,轉換為日期,添加調整,然后將日期組件分解出來以形成新的文件名。 最后,我們重命名原始文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM