2017-06-02 18 views
1

我想運行需要使用文件時間戳的R腳本。訪問R中的文件日期

使用Windows資源管理器,我意識到有3種'文件日期類型'(「日期」,「創建日期」和「修改日期」)。見下文。

file dates in windows explorer

當使用一個R函數file.info()你可以閱讀「創建日期」和「修改日期」,而不是「日期」欄(如在Windows資源管理器apperead)此日期欄是一個我需要的。

photo.directory <- file.info(getwd()) 
head(photo.directory) 
       size isdir mode    mtime    ctime 
IMG_0381.jpg 15904788 FALSE 666 2017-05-02 13:55:14 2017-05-25 15:39:36 
IMG_0382.jpg 8895692 FALSE 666 2017-05-02 13:55:17 2017-05-25 15:39:36 
IMG_0383.jpg 8731599 FALSE 666 2017-05-02 13:55:21 2017-05-25 15:39:37 
IMG_0384.jpg 15189133 FALSE 666 2017-05-02 13:55:25 2017-05-25 15:39:37 
IMG_0385.jpg 10545637 FALSE 666 2017-05-02 13:55:29 2017-05-25 15:39:38 
IMG_0386.jpg 10565079 FALSE 666 2017-05-02 13:55:31 2017-05-25 15:39:38 
          atime exe 
IMG_0381.jpg 2017-05-25 15:39:36 no 
IMG_0382.jpg 2017-05-25 15:39:36 no 
IMG_0383.jpg 2017-05-25 15:39:37 no 
IMG_0384.jpg 2017-05-25 15:39:37 no 
IMG_0385.jpg 2017-05-25 15:39:38 no 
IMG_0386.jpg 2017-05-25 15:39:38 no 

任何想法如何克服這在R?

+0

檢查此評論: https://superuser.com/questions/147525/what-is-the-date-column-in-windows-7-explorer-it-matches-no-date-column-from – Jimbou

+0

似乎有兩個軟件包可以訪問EXIF信息:'exif'和'exifr'。你可以試試。 –

+0

我不是你的使用案例,但你可能對搞清楚爲什麼修改日期大於創建日期感興趣 –

回答

1

日期列通常是指「創建日期」和「修改日期」之間的較早值。但是,對於像JPG這樣的文件,文件元數據內部有特殊的日期字段優先。

對於R,有包exifr,它允許您讀取EXIF標頭以檢索所需的日期。

由於您運行的是Windows,因此您可能需要首先安裝Perl。你可以在包裹的github page找到更多的信息。

我運行Ubuntu,所以這是很簡單的:

# Function to retrieve data 

filedate <- function(f){ 

    require(exifr) 

    if (grepl('.jpg$',f)){ 

    d <- exifr(f)$DateTimeOriginal 

    }else{ 

    finfo <- file.info(f) 

    d <- c(finfo$ctime,finfo$mtime)[which.min(c(finfo$ctime,finfo$mtime))] 

    } 

    return(d) 

} 


# list files 

fls <- list.files(getwd(),full.names=TRUE) 
fls_dts <- sapply(fls,filedate) 

請注意,我只是對分離的JPG文件...我可以與EXIF的模式添加的文件類型更多的擴展。 我也可以運行exifr的所有文件,並添加一個if子句運行file.info如果exifr回報NULL(意即在quiestion文件沒有一個EXIF格式

HTH