Risposte:
Utilizzare os.rename:
import os
os.rename('a.txt', 'b.kml')
C:/folder/file.txtsu Windows o /home/file.txtsu Linux / MacOS).
OSErrorsui sistemi Windows. os.path.existsdovrebbe essere usato per verificare se la destinazione esiste prima di rinominare. Questo crea un bug "Time Of Check to Time Of Use", ma è improbabile che causi problemi. (Non conosco un modo semplice per aggirare questo problema - vedi qui .
os.replace
Il file potrebbe trovarsi all'interno di una directory, in tal caso specificare il percorso:
import os
old_file = os.path.join("directory", "a.txt")
new_file = os.path.join("directory", "b.kml")
os.rename(old_file, new_file)
import shutil
shutil.move('a.txt', 'b.kml')
Questo funzionerà per rinominare o spostare un file.
shutil.movenon è una buona opzione perché non è un'operazione atomica. Se il file è aperto, ad esempio, shutil.movecreerà un file con new_name, ma non lo eliminerà old_namelasciando quindi due file. os.renamed'altra parte non farà nulla, che è un'opzione migliore . Con shutil.move, anche se hai riscontrato l'errore, dovresti comunque preoccuparti di controllare ed eliminare il file non autorizzato. Basta che non vale la pena quando esiste uno strumento migliore:os.rename .
A partire da Python 3.4 è possibile utilizzare il modulo pathlib per risolvere questo problema.
Se ti capita di trovarti su una versione precedente, puoi utilizzare la versione di backport trovata qui
Supponiamo che tu non sia nel percorso di root (solo per aggiungere un po 'di difficoltà ad esso) che vuoi rinominare e devi fornire un percorso completo, possiamo guardare questo:
some_path = 'a/b/c/the_file.extension'
Quindi, puoi prendere il tuo percorso e crearne un Pathoggetto:
from pathlib import Path
p = Path(some_path)
Solo per fornire alcune informazioni su questo oggetto che abbiamo ora, possiamo estrarre cose da esso. Ad esempio, se per qualsiasi motivo vogliamo rinominare il file modificando il nome file da the_filea the_file_1, allora possiamo ottenere la parte nome file:
name_without_extension = p.stem
E tieni sempre presente anche l'estensione:
ext = p.suffix
Possiamo eseguire la nostra modifica con una semplice manipolazione di stringhe:
Python 3.6 e versioni successive utilizzano le stringhe f!
new_file_name = f"{name_without_extension}_1"
Altrimenti:
new_file_name = "{}_{}".format(name_without_extension, 1)
E ora possiamo eseguire la nostra ridenominazione chiamando il renamemetodo sull'oggetto path che abbiamo creato e aggiungendolo extper completare la struttura di ridenominazione corretta che vogliamo:
p.rename(Path(p.parent, new_file_name + ext))
Più presto per mostrare la sua semplicità:
Python 3.6+:
from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, f"{p.stem}_1_{p.suffix}"))
Le versioni inferiori a Python 3.6 utilizzano invece il metodo del formato stringa:
from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, "{}_{}_{}".format(p.stem, 1, p.suffix))
pathliblibreria è stata introdotta in Python 3.4, quindi condividere la risposta qui fornisce anche l'esposizione a un modulo solido per mostrare la sua versatilità e utilizzo per requisiti più complessi.
{}Sono per la formattazione delle stringhe, di cui puoi leggere qui . Alla fine, ciò che sta accadendo è che {}vengono sostituiti con le variabili che vengono passate al formatmetodo. Quindi il primo {}conterrà ciò che è dentro name_without_extension, e il secondo conterrà il secondo argomento che è semplicemente 1.
os.rename(old, new)
Questo si trova nei documenti di Python: http://docs.python.org/library/os.html
Usa os.rename. Ma devi passare il percorso completo di entrambi i file alla funzione. Se ho un file a.txtsul mio desktop, lo farò e dovrò dare anche il file completo.
os.rename('C:\\Users\\Desktop\\a.txt', 'C:\\Users\\Desktop\\b.kml')
import os
# Set the path
path = 'a\\b\\c'
# save current working directory
saved_cwd = os.getcwd()
# change your cwd to the directory which contains files
os.chdir(path)
os.rename('a.txt', 'b.klm')
# moving back to the directory you were in
os.chdir(saved_cwd)
chdir()a una directory, ad esempio cosa succede in Windows quando è un UNC? E fare un chdir()ha effetti collaterali. Preferirei semplicemente specificare i percorsi necessari os.rename()direttamente, senza chdir()ing.
È possibile utilizzare os.system per richiamare il terminale per eseguire l'attività:
os.system('mv oldfile newfile')
mvè un programma a riga di comando incorporato unix per spostare / rinominare un file.
import os
import re
from pathlib import Path
for f in os.listdir(training_data_dir2):
for file in os.listdir( training_data_dir2 + '/' + f):
oldfile= Path(training_data_dir2 + '/' + f + '/' + file)
newfile = Path(training_data_dir2 + '/' + f + '/' + file[49:])
p=oldfile
p.rename(newfile)
os.pathcon il moderno pathlibè piuttosto incerta. Vai fino in fondo con pathlibinvece.
import shutil
import os
files = os.listdir("./pics/")
for key in range(0, len(files)):
print files[key]
shutil.move("./pics/" + files[key],"./pics/img" + str(key) + ".jpeg")
Questo dovrebbe farlo. python 3+