¿El modo de escritura de archivos "adjuntar" de Python solo escribe nuevos bytes, o también reescribe todo el archivo?
Aunque me imagino que el modo de agregar es lo suficientemente "inteligente" como para insertar solo los nuevos bytes que se agregan, quiero estar absolutamente seguro de que Python no lo maneja reescribiendo el archivo completo junto con los nuevos bytes.
Estoy intentando mantener una copia de seguridad en ejecución de un registro de programa y podría llegar a varios miles de registros en formato CSV.
Respuestas
Las operaciones de archivos de Python son envoltorios de conveniencia sobre las operaciones de archivos del sistema operativo. El sistema operativo implementa estas operaciones del sistema de archivos internamente, las reenvía a un módulo cargable (complemento) o un servidor externo (NFS, SMB). La mayoría de los sistemas operativos desde 1971 son capaces de agregar datos al archivo existente. Al menos todos los que afirman ser compatibles con POSIX de forma remota.
El modo de adición de POSIX simplemente abre el archivo para escribir y mueve el puntero del archivo al final del archivo. Esto significa que todas las operaciones de escritura simplemente escribirán más allá del final del archivo.
Puede haber algunas excepciones, por ejemplo, alguna rutina puede usar llamadas al sistema de bajo nivel para mover el puntero del archivo hacia atrás. O es posible que el sistema de archivos subyacente no sea compatible con POSIX y utilice algún tipo de almacenamiento transaccional de objetos como AWS S3. Pero para cualquier escenario estándar, no me preocuparía por tales casos.
Sin embargo, dado que mencionó la copia de seguridad como su caso de uso, debe tener mucho cuidado. Las copias de seguridad no son tan fáciles como parecen en la superficie. Cosas de qué preocuparse, varios cachés que podrían contener datos en la memoria antes si se escriben en el disco. ¿Qué sucederá si se corta la energía justo después de agregar nuevos registros? Además, ¿qué pasará si alguien inicia varias copias de su programa?
Y lo ultimo. A menos que esté ejecutando en una computadora de 8 bits de la década de 1980, algunos miles de líneas CSV no son nada para el hardware moderno. Incluso si los archivos se cargan y se vuelven a escribir, no notaría ninguna diferencia