Разгледах интерфейса на Python os
, но не успях да открия метод за преместване на файл. Как да направя еквивалента на $ mv ...
в Python?
>>> source_files = '/PATH/TO/FOLDER/*'
>>> destination_folder = 'PATH/TO/FOLDER'
>>> # equivalent of $ mv source_files destination_folder
os.rename()
, shutil.move()
или os.replace()
Всички те използват един и същ синтаксис:
import os
import shutil
os.rename("path/to/current/file.foo", "path/to/new/destination/for/file.foo")
shutil.move("path/to/current/file.foo", "path/to/new/destination/for/file.foo")
os.replace("path/to/current/file.foo", "path/to/new/destination/for/file.foo")
Обърнете внимание, че трябва да включите името на файла (file.foo
) както в аргументите за източника, така и в аргументите за дестинацията. Ако то бъде променено, файлът ще бъде преименуван, както и преместен.
Обърнете внимание също така, че в първите два случая директорията, в която се създава новият файл, вече трябва да съществува. В Windows файл с това име не трябва да съществува или ще бъде повдигнато изключение, но os.replace()
ще замени мълчаливо файла дори и в този случай.
Както беше отбелязано в коментарите към други отговори, в повечето случаи shutil.move
просто извиква os.rename
. Въпреки това, ако местоназначението е на диск, различен от изходния, вместо това ще копира и след това ще изтрие изходния файл.
Въпреки че os.rename()
и shutil.move()
преименуват файлове, командата, която е най-близка до командата mv на Unix, е shutil.move()
. Разликата е, че os.rename()
не работи, ако източникът и местоназначението са на различни дискове, докато shutil.move()
не се интересува от това на кой диск са файловете.
Както за os.rename, така и за shutil.move ще трябва да импортирате модула. Не е необходим символ *, за да се преместят всички файлове.
Имаме папка в /opt/awesome, наречена source, с един файл, наречен awesome.txt.
in /opt/awesome
○ → ls
source
○ → ls source
awesome.txt
python
>>> source = '/opt/awesome/source'
>>> destination = '/opt/awesome/destination'
>>> import os
>>> os.rename(source, destination)
>>> os.listdir('/opt/awesome')
['destination']
Използвахме os.listdir, за да видим, че името на папката действително се е променило. Ето и shutil, който премества дестинацията обратно към източника.
>>> import shutil
>>> shutil.move(destination, source)
>>> os.listdir('/opt/awesome/source')
['awesome.txt']
Този път проверих в папката с източника, за да се уверя, че създаденият от мен файл awesome.txt съществува. Той е там :)
Сега вече преместихме една папка и нейните файлове от източник в дестинация и обратно.