2009-07-09 16 views
8

Jestem zdezorientowany z pliku poruszającego się pod pytonem. pod oknami poleceń, jeśli mam katalogu C: \ A i katalog c: \ b, mogę zrobićPrzenoszenie plików pod pytonem

move c:\a c:\b 

który porusza się na wynik B jest struktura katalogu c: \ b \ a

Gdy próbuję to z os.rename lub shutil.move:

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

uzyskać

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

jeśli przenieść pojedynczy plik pod c: \ a, działa.

Pyton Jak przenieść katalog do innego istniejącego katalogu?

+0

Czy chcesz przenieść całą zawartość katalogu do innego katalogu lub przenieść sam katalog? – 182764125216

Odpowiedz

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

jest równoważna

move c:\a c:\b 

pod oknami poleceń

0

Musisz podać pełną ścieżkę to są przemieszczane do:

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

Faktycznie, wygląda shutil.move będą robić to, co chcesz, patrząc na jego dokumentacji:

Jeśli miejsce docelowe jest katalogiem lub dowiązaniem symbolicznym do katalogu, źródło zostaje przeniesione do katalogu.

(I jego source.)

+0

Niestety to się nie powiedzie, jeśli pliki znajdują się na różnych woluminach. –

+0

@wuub: Co sprawia, że ​​tak mówisz? Dokumenty mówią, że w niektórych systemach plików UNIX istnieje dziwne zachowanie, ale OP mówi o systemie Windows. – cdleary

+0

Hmm, jest to proste dla pojedynczego katalogu, ale przenoszenie dużej struktury katalogów do innego folderu jest w ten sposób bardzo niewygodne. Dość dziwne, że python tego nie obsługuje. – Ash

8

Można spróbować przy użyciu modułu Shutil.

+2

W szczególności shutil.move (srcFile, destFile) – PTBNL

1

kiedy muszę wiele operacji systemu plików Wolę używając 'path' moduł:
http://pypi.python.org/pypi/path.py/2.2

Nadszedł całkiem dobry i lekki wrapp er wokół wbudowanego modułu "os.path".

także kod:

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

jest nieco dziwne, bo nie ma na to specjalna funkcja:

last_part = os.path.basename(src) 
+0

Doskonały punkt - zapomniałem o podstawowej wersji. Nie podoba mi się, że istnieje więcej niż jeden sposób, aby to zrobić. ;-) – cdleary

2

os.rename ("c:/a /", „c:/b "/) -> Zmienia nazwę folderu a w folderze b

os.nazwy ("c:/a /" "C:/B/A"), -> umieścić Folder b w folderze A

0

Stosując skręcone na FilePath:

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

lub, bardziej ogólnie:

from twisted.python.filepath import FilePath 
def moveToExistingDir(fileOrDir, existingDir): 
    fileOrDir.moveTo(existingDir.child(fileOrDir.basename())) 
moveToExistingDir(FilePath("c:/a"), FilePath("c:/b"))