Перемещение файлов под питоном - PullRequest
8 голосов
/ 09 июля 2009

Я запутался с перемещением файла под python. В командной строке Windows, если у меня есть каталог c: \ a и каталог c: \ b, я могу сделать

move c:\a c:\b

, который перемещает a в b, является структурой каталогов c: \ b \ a

Если я попробую это с os.rename или shutil.move:

os.rename("c:/a", "c:/b")

Я получаю

WindowsError: [Error 17] Cannot create a file when that file already exists

Если переместить один файл в папку c: \ a, это сработает.

Как в Python переместить каталог в другой существующий каталог?

Ответы [ 6 ]

16 голосов
/ 09 июля 2009
os.rename("c:/a", "c:/b/a") 

эквивалентно

move c:\a c:\b

в командной строке Windows

8 голосов
/ 09 июля 2009

Вы можете попробовать использовать модуль Shutil .

2 голосов
/ 09 июля 2009

os.rename ("c: / a /", "c: / b" /) -> Изменяет имя папки a в папке b

os.rename ("c: / a /", "c: / b / a") -> Поместить папку b в папку a

1 голос
/ 09 июля 2009

Когда мне нужно много операций с файловой системой, я предпочитаю использовать модуль 'path':
http://pypi.python.org/pypi/path.py/2.2

Это довольно хорошая и легкая оболочка для встроенного модуля os.path.

Также код:

last_part = os.path.split(src)[1]

немного странно, потому что для этого есть специальная функция:

last_part = os.path.basename(src)
0 голосов
/ 09 июля 2009

Использование Twisted FilePath :

from twisted.python.filepath import FilePath
FilePath("c:/a").moveTo(FilePath("c:/b/a"))

или, в более общем случае:

from twisted.python.filepath import FilePath
def moveToExistingDir(fileOrDir, existingDir):
    fileOrDir.moveTo(existingDir.child(fileOrDir.basename()))
moveToExistingDir(FilePath("c:/a"), FilePath("c:/b"))
0 голосов
/ 09 июля 2009

Вам необходимо указать полный путь, по которому он перемещается:

src = 'C:\a'
dst_dir = 'C:\b'
last_part = os.path.split(src)[1]
os.rename(src, os.path.join(dst_dir, last_part))

На самом деле, похоже, что shutil.move сделает то, что вы хотите, посмотрев документацию:

Если местом назначения является каталог или символическая ссылка на каталог, источник перемещен в каталог.

(И его источник .)

...