繁体   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