Le mode d'écriture de fichier «ajouter» de Python n'écrit-il que de nouveaux octets, ou réécrit-il également le fichier entier?
Bien que j'imagine que le mode d'ajout est suffisamment "intelligent" pour n'insérer que les nouveaux octets ajoutés, je veux m'assurer absolument que Python ne le gère pas en réécrivant le fichier entier avec les nouveaux octets.
J'essaie de conserver une sauvegarde en cours d'exécution d'un journal de programme, et il pourrait atteindre plusieurs milliers d'enregistrements au format CSV.
Réponses
Les opérations sur les fichiers Python sont des wrappers pratiques sur les opérations sur les fichiers du système d'exploitation. Le système d'exploitation implémente ces opérations de système de fichiers en interne, les transmet à un module chargeable (plugin) ou à un serveur externe (NFS, SMB). La plupart des systèmes d'exploitation depuis 1971 sont capables d'effectuer l'ajout de données au fichier existant. Au moins tous ceux qui prétendent être même à distance compatibles POSIX.
Le mode d'ajout POSIX ouvre simplement le fichier pour l'écriture et déplace le pointeur de fichier à la fin du fichier. Cela signifie que toutes les opérations d'écriture écriront juste après la fin du fichier.
Il peut y avoir quelques exceptions à cela, par exemple, une routine peut utiliser des appels système de bas niveau pour déplacer le pointeur de fichier vers l'arrière. Ou le système de fichiers sous-jacent peut ne pas être conforme à POSIX et utiliser une forme de stockage transactionnel objet comme AWS S3. Mais pour tout scénario standard, je ne m'inquiéterais pas de tels cas.
Cependant, puisque vous avez mentionné la sauvegarde comme votre cas d'utilisation, vous devez faire très attention. Les sauvegardes ne sont pas aussi faciles qu'elles le semblent à première vue. Choses à craindre, divers caches qui pourraient contenir des données en mémoire avant si elles sont écrites sur le disque. Que se passera-t-il si l'alimentation est coupée juste après avoir ajouté de nouveaux enregistrements? De plus, que se passera-t-il si quelqu'un commence plusieurs copies de votre programme?
Et la dernière chose. Sauf si vous utilisez un ordinateur 8 bits des années 80, quelques milliers de lignes CSV ne sont rien pour le matériel moderne. Même si les fichiers sont chargés et réécrits, vous ne remarquerez aucune différence