Ho cercato nell'interfaccia Python os
, ma non sono riuscito a trovare un metodo per spostare un file. Come potrei fare l'equivalente di $ mv ...
in Python?
>>> source_files = '/PATH/TO/FOLDER/*'
>>> destination_folder = 'PATH/TO/FOLDER'
>>> # equivalent of $ mv source_files destination_folder
os.rename()
, shutil.move()
, o os.replace()
Tutti impiegano la stessa sintassi:
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")
Nota che devi includere il nome del file (file.foo
) in entrambi gli argomenti sorgente e destinazione. Se viene cambiato, il file verrà rinominato e spostato.
Notate anche che nei primi due casi la directory in cui viene creato il nuovo file deve già esistere. Su Windows, un file con quel nome non deve esistere o verrà sollevata un'eccezione, ma os.replace()
sostituirà silenziosamente un file anche in quel caso.
Come è stato notato nei commenti ad altre risposte, shutil.move
chiama semplicemente os.rename
nella maggior parte dei casi. Tuttavia, se la destinazione è su un disco diverso da quello di origine, invece copierà e poi cancellerà il file di origine.
Anche se os.rename()
e shutil.move()
rinominano entrambi i file, il comando che più si avvicina al comando mv di Unix è shutil.move()
. La differenza è che os.rename()
non funziona se la sorgente e la destinazione sono su dischi diversi, mentre shutil.move()
non si preoccupa del disco su cui si trovano i file.
Per os.rename o shutil.move è necessario importare il modulo. Nessun carattere * è necessario per ottenere tutti i file spostati.
Abbiamo una cartella in /opt/awesome chiamata source con un file chiamato 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']
Abbiamo usato os.listdir per vedere che il nome della cartella è effettivamente cambiato. Ecco lo shutil che sposta la destinazione di nuovo all'origine.
>>> import shutil
>>> shutil.move(destination, source)
>>> os.listdir('/opt/awesome/source')
['awesome.txt']
Questa volta ho controllato nella cartella source per essere sicuro che il file awesome.txt che ho creato esista. È lì :)
Ora abbiamo spostato una cartella e i suoi file da una sorgente a una destinazione e viceversa.