Question

Je suis en train d'écrire un script Python enregistreur qui écrit dans un fichier CSV de la manière suivante:

  1. Ouvrez le fichier
  2. Ajout de données
  3. Fermer le fichier (je pense que cela est nécessaire pour enregistrer les modifications, pour être sûr après chaque routine de journalisation.)

PROBLÈME :
Le fichier est très accessible via l'Explorateur Windows (j'utilise XP). Si le fichier est ouvert dans Excel, son accès est verrouillé par Excel. Lorsque le script tente d'ajouter des données, de toute évidence, il échoue, il abandonne tout à fait.

Objectif: Est-il un moyen de verrouiller un fichier en utilisant Python afin que tout accès il reste exclusif au script? Ou peut-être ma méthode est pauvre en premier lieu?

Était-ce utile?

La solution

Au lieu de fermer et rouvrir le dossier après chaque accès, juste vider son tampon:

theloggingfile.flush()

De cette façon, vous le garder ouvert pour l'écriture en Python, qui devrait verrouiller le fichier à partir d'autres programmes d'ouverture pour l'écriture. I pense Excel sera en mesure d'ouvrir en lecture seule alors qu'il est ouvert en Python, mais je ne peux pas vérifier que sans redémarrer Windows.

EDIT: Je ne pense pas que vous avez besoin de l'étape ci-dessous. .flush() doit envoyer au système d'exploitation, et si vous essayez de regarder dans un autre programme, le système d'exploitation devrait lui donner la version en cache. Utilisez os.fsync pour forcer le système d'exploitation à écrire vraiment sur le disque dur, par exemple si vous êtes préoccupé par les pannes de courant soudaines.

os.fsync(theloggingfile.fileno())

Autres conseils

Pour autant que je sache, Windows ne prend pas en charge le verrouillage des fichiers. En d'autres termes, les applications qui ne connaissent pas votre fichier verrouillé ne peut être empêché de lire un fichier.

Mais la question qui reste est: comment arriver Excel

Vous pouvez essayer d'écrire dans un fichier temporaire premier (qui Excel ne sait pas) et remplacer le fichier d'origine par celui-ci lateron.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top