我目前正在使用以 UTC 格式 YYYYMMDD_HHMMSS 的默認檔案名錄制到 SD 卡的大型聲學錄音 (.wav) 資料集:
20220606_152100.wav 20220606_152200.wav 20220606_152300.wav
為了進行分析,我將時間因素包括在內,并且每次錄制都需要本地日期時間,比 UTC 晚 5 小時。我可以輕松地從檔案名中獲取 UTC 日期時間并將其轉換為 R 中的本地時間:
wav <- list.files(datadir, pattern="*.WAV$",full.names=FALSE, recursive=TRUE)
filename <- tools::file_path_sans_ext(basename(FI))
recordedtime <- strptime(filename,"%Y%m%d_%H%M%S",tz="UTC")
datetime <- (recordedtime-hours(5))
...這適用于 R 中的分析,但是當我在其他程式中使用子集時,我希望能夠重命名所有檔案以降低我忘記轉換的風險(或者做更多一次)當我在分析之間進行時。我已經能夠手動更改作業目錄中的單個檔案名:
file.rename("20220606_152100.wav","20220606_102100.wav")
但顯然有數千個檔案,我不能證明單獨這樣做是合理的。
提前感謝您的任何幫助或建議:-)
uj5u.com熱心網友回復:
以下擴展了您的作業流程以根據調整后的時間創建新的檔案路徑,然后您可以將其file.rename()與原始路徑的向量一起傳遞。
library(tools)
library(lubridate)
wavpaths <- list.files(datadir, pattern="*.wav$", full.names=TRUE, recursive=TRUE)
utctime <- wavpaths |>
file_path_sans_ext() |>
basename() |>
strptime("%Y%m%d_%H%M%S", tz="UTC")
localtime <- strftime(utctime - hours(5), "%Y%m%d_%H%M%S")
renpaths <- file.path(dirname(wavpaths), paste0(localtime, ".wav"))
file.rename(wavpaths, renpaths)
結果:
# original paths
wavpaths
#> [1] "wavs/20220606_152100.wav" "wavs/subdir1/20220606_021000.wav"
#> [3] "wavs/subdir1/20220606_230000.wav"
# new paths
list.files(datadir, pattern="*.wav$", full.names=TRUE, recursive=TRUE)
#> [1] "wavs/20220606_102100.wav" "wavs/subdir1/20220605_211000.wav"
#> [3] "wavs/subdir1/20220606_180000.wav"
示例檔案結構設定:
datadir <- "wavs"
dir.create(datadir)
dir.create(file.path(datadir, "subdir1"))
file.create(file.path(datadir, "20220606_152100.wav"))
file.create(file.path(datadir, "subdir1", c("20220606_021000.wav", "20220606_230000.wav")))
使用reprex v2.0.2創建于 2022-11-09
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/531764.html
標籤:r约会时间时间戳文件名
上一篇:如何將HH:MM:SS格式添加到java中的LocalDate?
下一篇:替換與df中特定日期相關的值?
