web-dev-qa-db-fra.com

Comment puis-je définir la dernière heure de modification d'un fichier à partir de python?

J'ai un script python qui télécharge un fichier via FTP en utilisant ftplib .

Mon code de téléchargement actuel ressemble à l'exemple des documents de la bibliothèque ftp:

ftp.retrbinary('RETR README', open('README', 'wb').write)

Maintenant, j'ai une exigence selon laquelle le fichier téléchargé via FTP doit avoir la même heure de dernière modification que le fichier sur le serveur FTP lui-même. En supposant que je pourrais analyser l'heure de ftp.retrlines('list'), comment puis-je définir l'heure modifiée sur le fichier téléchargé?

Je suis sur un OS basé sur Unix si cela compte.

46
jdeuce

Utilisation os.utime :

import os

os.utime(path_to_file, (access_time, modification_time))
46
Charlie

Si vous voulez le faire directement à partir de python, vous recherchez os.utime. Le docs peut vous donner plus d'informations.

50
Craig Citro

Il y a 2 façons de procéder. L'un est l'exemple os.utime ci-dessus qui est requis si vous définissez l'horodatage sur un fichier qui n'a pas de statistiques de référence. Cependant, si vous copiez les fichiers avec "shutil.copy ()", vous disposez d'un fichier de référence. Ensuite, si vous souhaitez que les bits d'autorisation, la dernière heure d'accès, la dernière heure de modification et les indicateurs soient également copiés, vous pouvez utiliser "shutil.copystat ()" immédiatement après la "shutil.copy ()".

Je n'ai aucune idée pourquoi ils n'ajoutent pas de drapeaux à "shutil.copy ()" qui fait cela en une seule commande. On dirait qu'il a été mis en œuvre par différents auteurs. L'un a implémenté la copie et l'autre implémenté le copystat pour remplir la fonction manquante dans le premier.

Et puis il y a "shutil.copy2" qui est destiné à faire les deux à la fois ...

7