Sustitución atómica de archivos UTF-8
Sustituye un archivo UTF-8 mediante un archivo temporal en el mismo directorio.
import os
from pathlib import Path
from tempfile import NamedTemporaryFile
def replace_utf8(path, text):
if not isinstance(path, (str, Path)) or type(text) is not str:
raise ValueError("replace.input")
target, data = Path(path), text.encode("utf-8")
temporary = None
try:
with NamedTemporaryFile(dir=target.parent, prefix=".swap-", delete=False) as out:
temporary = Path(out.name)
out.write(data)
os.replace(temporary, target)
finally:
if temporary is not None:
temporary.unlink(missing_ok=True)Revisa antes de aplicar
Compara el comportamiento real con el resultado esperado. Si una prueba falla, investiga la causa antes de hacer más cambios.
Modelos
Configura un endpoint compatible con OpenAI o Anthropic usando la URL base y, si hace falta, una clave API. Prueba la conexión. Un servidor local debe estar en ejecución; las herramientas remotas pueden enviar datos por separado.
Proyecto
Prueba texto vacío, Unicode y fallo de sustitución, cerrando el temporal antes de sustituir y eliminando restos sin cambiar el archivo anterior ante ese fallo.
import os
from pathlib import Path
from tempfile import NamedTemporaryFile
def replace_utf8(path, text):
if not isinstance(path, (str, Path)) or type(text) is not str:
raise ValueError("replace.input")
target, data = Path(path), text.encode("utf-8")
temporary = None
try:
with NamedTemporaryFile(dir=target.parent, prefix=".swap-", delete=False) as out:
temporary = Path(out.name)
out.write(data)
os.replace(temporary, target)
finally:
if temporary is not None:
temporary.unlink(missing_ok=True)Revisa qué se conserva cuando falla una actualización de archivo
Replacent es un entorno de programación para Windows que permite usar un modelo de IA para razonar sobre cambios que afectan a archivos en disco. Empieza por el código del proyecto y explica qué debe conservarse si una actualización no puede terminar. Pide al asistente que examine la preparación, escritura, sustitución y limpieza como una operación conectada. El objetivo es una propuesta cuyo comportamiento ante fallos puedas describir antes de probarla con datos útiles.
El ejemplo replace_utf8.py propone una tarea con un archivo temporal y la sustitución del destino. Puedes pedir al asistente que revise cuándo se realiza la codificación, dónde se coloca la salida temporal y qué limpieza se ejecuta tras una excepción. Examina el código real y el entorno de destino en lugar de suponer que una llamada de sustitución establece todas las propiedades de durabilidad que pueda necesitar tu aplicación.
Prueba la operación revisada en un directorio desechable y comprueba el contenido del destino y los archivos sobrantes tanto tras el éxito como tras fallos controlados. Mantén las observaciones en la conversación para que los siguientes cambios aborden comportamientos demostrados. Replacent admite conexiones compatibles con OpenAI o de Anthropic admitidas, con credenciales cuando sean necesarias. Si allí hay un modelo sin filtros disponible, puedes elegirlo para la conversación; los límites de contexto, las herramientas y las restricciones de respuesta siguen dependiendo del modelo y del servidor. Las comprobaciones de tu proyecto siguen siendo la evidencia del contrato de actualización de archivos.
Preguntas sobre sustitución y limpieza
- ¿Qué debe especificar una solicitud de actualización de archivos?
Describe el contenido esperado del destino tras el éxito, qué debe conservarse tras un fallo y si se pueden sustituir archivos existentes. Incluye el entorno de destino y el requisito de codificación para comprobar la propuesta frente a poscondiciones concretas.
- ¿Sustituir equivale a almacenar de forma duradera?
No lo des por hecho. Los requisitos de durabilidad dependen de la implementación completa y del entorno. Si importa que los datos sobrevivan a una caída, indícalo por separado y revisa el comportamiento pertinente en vez de inferirlo de un patrón con archivos temporales.
- ¿Cómo puedo examinar el comportamiento de limpieza?
Usa archivos desechables y casos de fallo controlados adecuados para tu proyecto. Comprueba después tanto el destino original como cualquier salida temporal. Lee también la ruta de excepción, porque una ejecución correcta no ejercita la limpieza tras una operación interrumpida.
- ¿Deben los errores de limpieza ocultar el fallo original?
Define el comportamiento de notificación de errores que necesita el código llamador. Examina si la limpieza puede lanzar otra excepción y ocultar el problema inicial; prueba esa ruta cuando sea práctico antes de aceptar una revisión de la operación.
Replacent · Actualizado 2026-10-25