2017-06-02 3 views
1

J'essaie d'exécuter un script R qui doit utiliser l'horodatage du fichier. En utilisant Windows Explorer, j'ai réalisé qu'il y a 3 'types de dates de fichiers' ("Date", "Date de création" et "Date de modification"). Voir ci-dessous.Accès aux dates de fichier dans R

file dates in windows explorer

Lorsque vous utilisez la fonction R file.info() vous pouvez lire « Date de création » et « Date de modification », mais pas la colonne « Date » (comme apperead sur l'explorateur Windows) Cette colonne de date est celle que j'ai besoin.

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 

Des idées pour surmonter cela dans R?

+0

vérifier ce commentaire.: https://superuser.com/questions/147525/what-is-the-date-column-in-windows-7-explorer-it-matches-no-date-column-from – Jimbou

+0

Il semble y avoir deux paquets à accéder EXIF info: 'exif' et' exifr' Vous pouvez les essayer –

+0

Je ne suis pas sur ce que votre cas d'utilisation est, mais vous pouvez être intéressé à comprendre pourquoi la date de modification est supérieure à la date de création –

Répondre

1

La colonne Date fait normalement référence à la valeur précédente entre "Date de création" et "Date de modification". Cependant, pour les fichiers tels que les fichiers JPG, il existe des champs Date spéciaux dans les métadonnées du fichier qui ont la priorité.

Pour R, il y a le paquet exifr, qui vous permet de lire un en-tête EXIF ​​pour récupérer les dates que vous voulez.

Puisque vous utilisez Windows, vous devrez probablement installer Perl en premier. Vous pouvez trouver plus d'infos à ce sujet sur le github page du paquet.

Je courais ubuntu, il était donc assez simple:

# 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) 

Notez que je suis juste pour séparer les fichiers JPG ... Je pourrais ajouter des extensions de types de fichiers avec EXIF ​​au motif. Sinon je pouvais courir exifr pour tous les fichiers, et ajouter une clause if pour exécuter les file.info si exifr rendements NULL (ce qui signifie que le fichier dans quiestion n'a pas un format EXIF ​​

HTH