es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Python – PermissionError: [WinError 32] El archivo está siendo utilizado por otro proceso.

He creado una función que toma todos mis PDF descargados, los fusiona y luego elimina los PDF antiguos. Cuando ejecuto el código en mi Mac, todo funciona bien, pero cuando lo ejecuto en mi computadora de trabajo con Windows, obtengo el siguiente error. El error ocurre cuando intento eliminar los archivos antiguos con os.delete(file).

PermissionError: [WinError 32] El proceso no puede acceder al archivo porque está siendo utilizado por otro proceso: “C:\Usuarios\X\Descargas\archivo.pdf”

def fusionar_pdf(contenedor):
    fusionador = PdfFileMerger(strict=False)
    todos_pdf = [a for a in glob("C:\Usuarios\X\Descargas\*.pdf")]
    todos_pdf_ordenados = sorted(todos_pdf, key=os.path.getmtime)
    [fusionador.append(pdf) for pdf in todos_pdf_ordenados]
    with open(f"C:\Usuarios\X\Escritorio\DocsFusionados{contenedor}", "wb") as nuevo_archivo:
        fusionador.write(nuevo_archivo)
for archivo in todos_pdf:
    os.remove(archivo)

He intentado reiniciar mi computadora y no abrir nada antes de ejecutar el programa. También pensé que tal vez OneDrive estaba causando el problema, pero pausar la sincronización de OneDrive tampoco ayudó.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que el archivo “file.pdf” está siendo utilizado actualmente por otro proceso, por lo que no se puede eliminar. Esto suele suceder cuando el archivo aún está abierto en otro programa o proceso. Dado que el código funciona en tu Mac, pero no en tu PC con Windows, es posible que pueda haber diferencias en la forma en que cada sistema operativo maneja el bloqueo y la eliminación de archivos.

    Para solucionar este problema, podrías intentar agregar algo de código adicional a tu función para imprimir más información sobre los archivos y su estado antes de intentar eliminarlos. Por ejemplo, podrías utilizar la función os.stat() para obtener información más detallada sobre cada archivo, o la biblioteca psutil para verificar qué proceso tiene abierto el archivo.

    Otro enfoque sería utilizar un bloque try-except alrededor de la llamada a la función os.remove() para manejar de manera más adecuada cualquier error de permiso. Por ejemplo, podrías querer registrar el error y omitir cualquier archivo que no se pueda eliminar, o pedir al usuario que cierre cualquier programa que pueda estar utilizando los archivos.

    En última instancia, la mejor solución puede depender de las circunstancias específicas de tu problema, por lo que puede requerir un poco de prueba y error para averiguar qué funciona mejor.

Comments are closed.