¿Cómo usar copyfile cuando hay espacios en el nombre del directorio?

Estoy tratando de realizar una tarea simple de copia de archivos en Windows y estoy teniendo algunos problemas.

Mi primer bash fue usar

import shutils source = 'C:\Documents and Settings\Some directory\My file.txt' destination = 'C:\Documents and Settings\Some other directory\Copy.txt' shutil.copyfile(source, destination) 

copyfile no puede encontrar la fuente y / o no puede crear el destino.

Mi segunda suposición fue usar

 shutil.copyfile('"' + source + '"', '"' + destination + '"') 

Pero está fallando de nuevo.

¿Alguna pista?


Editar

El código resultante es

 IOError: [Errno 22] Invalid argument: '"C:\Documents and Settings\Some directory\My file.txt"' 

No creo que los espacios sean los culpables. Tienes que escapar de barras invertidas en caminos, como este:

 source = 'C:\\Documents and Settings\\Some directory\\My file.txt' 

O, mejor aún, use el prefijo r :

 source = r'C:\Documents and Settings\Some directory\My file.txt' 

Utilice barras diagonales o una cadena de r’raw ‘.

Copyfile maneja los nombres de archivo de espacio.

No estás escapando de \ en las rutas del archivo correctamente.

 import shutils source = 'C:\\Documents and Settings\\Some directory\\My file.txt' destination = 'C:\\Documents and Settings\\Some other directory\\Copy.txt' shutil.copyfile(source, destination) 

Para ilustrar, intente ejecutar esto:

 print 'Incorrect: C:\Test\Derp.txt' print 'Correct : C:\\Test\\Derp.txt' 

Parece que hay otros problemas también. Errno 22 indica otro problema. He visto este error en los siguientes escenarios:

  • El archivo de origen o el archivo de destino está en uso por otro proceso.
  • La ruta del archivo contiene caracteres de fantasía de Unicode.
  • Otros problemas de acceso.