Tutkin Pythonin os
-rajapintaa, mutta en löytänyt menetelmää tiedoston siirtämiseen. Miten voisin tehdä Pythonissa vastaavan kuin $ mv ...
?
>>> source_files = '/PATH/TO/FOLDER/*'
>>> destination_folder = 'PATH/TO/FOLDER'
>>> # equivalent of $ mv source_files destination_folder
os.rename()
, shutil.move()
tai os.replace()
.
Kaikki käyttävät samaa syntaksia:
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")
Huomaa, että tiedoston nimi (file.foo
) on sisällytettävä sekä lähde- että kohdeargumentteihin. Jos sitä muutetaan, tiedosto nimetään uudelleen ja siirretään.
Huomaa myös, että kahdessa ensimmäisessä tapauksessa hakemiston, johon uusi tiedosto luodaan, on oltava jo olemassa. Windowsissa kyseisellä nimellä olevaa tiedostoa ei saa olla olemassa, tai siitä tulee poikkeus, mutta os.replace()
korvaa tiedoston äänettömästi silloinkin.
Kuten muiden vastausten kommenteissa on todettu, shutil.move
kutsuu useimmissa tapauksissa yksinkertaisesti os.rename
-tiedostoa. Jos kohdetiedosto on kuitenkin eri levyllä kuin lähdetiedosto, se kopioi sen sijaan lähdetiedoston ja poistaa sen jälkeen sen.
Vaikka os.rename()
ja shutil.move()
molemmat nimeävät tiedostoja uudelleen, komento, joka on lähinnä Unixin mv-komentoa, on shutil.move()
. Ero on siinä, että os.rename()
ei toimi, jos lähde ja kohde ovat eri levyillä, kun taas shutil.move()
ei välitä, millä levyllä tiedostot ovat.
Joko os.rename- tai shutil.move-moduulin täytyy tuoda moduuli. Kaikkien tiedostojen siirtämiseen ei tarvita *-merkkiä.
Meillä on kansio /opt/awesome nimellä source, jossa on yksi tiedosto nimeltä 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']
Käytimme os.listdir-ohjelmaa nähdäksemme, että kansion nimi todellakin muuttui. Tässä on shutil, joka siirtää määränpään takaisin lähteeseen.
>>> import shutil
>>> shutil.move(destination, source)
>>> os.listdir('/opt/awesome/source')
['awesome.txt']
Tällä kertaa tarkistin lähdekansion sisältä varmistaakseni, että luomani awesome.txt-tiedosto on olemassa. Se on siellä :)
Nyt olemme siirtäneet kansion ja sen tiedostot lähteestä määränpäähän ja takaisin.