2017-06-02 36 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