Как использовать copyfile, если в имени каталога есть пробелы? - PullRequest
5 голосов
/ 29 февраля 2012

Я пытаюсь выполнить простую задачу копирования файлов под Windows, и у меня возникают некоторые проблемы.

Моя первая попытка была использовать

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 не может найти источник и / или не может создать пункт назначения.

Мое второе предположение было использовать

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

Но опять не получается.

Есть подсказка?


Редактировать

Полученный код

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

Ответы [ 3 ]

11 голосов
/ 29 февраля 2012

Я не думаю, что пространства виноваты. Вы должны избежать обратной косой черты в путях, как это:

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

или, что еще лучше, используйте префикс r:

source = r'C:\Documents and Settings\Some directory\My file.txt'
3 голосов
/ 29 февраля 2012

Используйте косую черту или правую строку.

3 голосов
/ 29 февраля 2012

Copyfile обрабатывает имена файлов с пробелами.

Вы не экранируете \ в путях к файлам правильно.

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)

Чтобы проиллюстрировать это, попробуйте выполнить это:

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

Кажется, есть и другие проблемы.Errno 22 указывает на другую проблему.Я видел эту ошибку в следующих сценариях:

  • Исходный файл или целевой файл используется другим процессом.
  • Путь к файлу содержит причудливые символы Юникода.
  • Другие проблемы с доступом.
...