Ik heb in de Python os
interface gekeken, maar kon geen methode vinden om een bestand te verplaatsen. Hoe zou ik het equivalent van $ mv ...
in Python kunnen doen?
>>> source_files = '/PATH/TO/FOLDER/*'
>>> destination_folder = 'PATH/TO/FOLDER'
>>> # equivalent of $ mv source_files destination_folder
os.rename()
, shutil.move()
, of os.replace()
Ze gebruiken allemaal dezelfde syntaxis:
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")
Merk op dat je de bestandsnaam (file.foo
) in zowel het bron- als het doelargument moet opnemen. Als deze wordt gewijzigd, zal het bestand zowel worden hernoemd als verplaatst.
Merk ook op dat in de eerste twee gevallen de directory waarin het nieuwe bestand wordt aangemaakt al moet bestaan. Onder Windows mag een bestand met die naam niet bestaan, anders wordt er een exceptie gemaakt, maar os.replace()
zal zelfs in dat geval een bestand stilzwijgend vervangen.
Zoals is opgemerkt in commentaren op andere antwoorden, roept shutil.move
in de meeste gevallen gewoon os.rename
aan. Echter, als de bestemming op een andere schijf staat dan de bron, zal het in plaats daarvan het bronbestand kopiëren en vervolgens verwijderen.
Hoewel os.rename()
en shutil.move()
beide bestanden kunnen hernoemen, is het commando dat het dichtst bij het Unix mv commando komt shutil.move()
. Het verschil is dat os.rename()
niet werkt als de bron en bestemming op verschillende schijven staan, terwijl shutil.move()
het niet uitmaakt op welke schijf de bestanden staan.
Voor os.rename of shutil.move moet je de module importeren. Er is geen * karakter nodig om alle bestanden verplaatst te krijgen.
We hebben een map in /opt/awesome genaamd source met één bestand genaamd 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']
We hebben os.listdir gebruikt om te zien dat de mapnaam inderdaad veranderd is. Hier's de shutil die de bestemming terug naar de bron verplaatst.
>>> import shutil
>>> shutil.move(destination, source)
>>> os.listdir('/opt/awesome/source')
['awesome.txt']
Deze keer controleerde ik in de bron map om zeker te zijn dat het awesome.txt bestand dat ik maakte bestaat. Het is er :)
Nu hebben we een map en zijn bestanden verplaatst van een bron naar een bestemming en weer terug.