Réponses:
Utilisation os.rename
:
import os
os.rename('a.txt', 'b.kml')
C:/folder/file.txt
sous Windows ou /home/file.txt
sous Linux / MacOS).
OSError
sur les systèmes Windows. os.path.exists
doit être utilisé pour vérifier si la cible existe avant de renommer. Cela crée un bogue "Time Of Check to Time Of Use", mais il est peu probable qu'il cause des problèmes. (Je ne connais aucun moyen facile de contourner cela - voir ici .
os.replace
Le fichier peut se trouver dans un répertoire, dans ce cas précisez le chemin:
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')
Cela fonctionnera pour renommer ou déplacer un fichier.
shutil.move
n'est pas une bonne option car il ne s'agit pas d'une opération atomique. Si le fichier est ouvert, par exemple, shutil.move
créera un fichier avec new_name
, mais ne le supprimera pas, old_name
vous laissant donc deux fichiers. os.rename
d'autre part ne fera rien, ce qui est une meilleure option . Avec shutil.move
, même si vous avez détecté l'erreur, vous devrez toujours vous soucier de la vérification et de la suppression du fichier escroc. Tout simplement pas la peine quand un meilleur outil existe:os.rename
.
Depuis Python 3.4, on peut utiliser le module pathlib pour résoudre ce problème.
S'il vous arrive d'être sur une ancienne version, vous pouvez utiliser la version rétroportée trouvée ici
Supposons que vous ne soyez pas dans le chemin racine (juste pour ajouter un peu de difficulté) que vous souhaitez renommer et que vous deviez fournir un chemin complet, nous pouvons regarder ceci:
some_path = 'a/b/c/the_file.extension'
Vous pouvez donc emprunter votre chemin et en créer un Path
objet:
from pathlib import Path
p = Path(some_path)
Juste pour fournir quelques informations sur cet objet que nous avons maintenant, nous pouvons en extraire des choses. Par exemple, si pour une raison quelconque nous voulons renommer le fichier en modifiant le nom de fichier de the_file
à the_file_1
, alors nous pouvons obtenir la partie nom de fichier:
name_without_extension = p.stem
Et tenez également l'extension en main:
ext = p.suffix
Nous pouvons effectuer notre modification avec une simple manipulation de chaîne:
Python 3.6 et supérieur utilise des chaînes f!
new_file_name = f"{name_without_extension}_1"
Autrement:
new_file_name = "{}_{}".format(name_without_extension, 1)
Et maintenant, nous pouvons effectuer notre changement de nom en appelant la rename
méthode sur l'objet chemin que nous avons créé et en l'ajoutant ext
pour compléter la structure de changement de nom appropriée:
p.rename(Path(p.parent, new_file_name + ext))
Plus brièvement pour montrer sa simplicité:
Python 3.6+:
from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, f"{p.stem}_1_{p.suffix}"))
Les versions inférieures à Python 3.6 utilisent à la place la méthode du format de chaîne:
from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, "{}_{}_{}".format(p.stem, 1, p.suffix))
pathlib
bibliothèque est introduite en python 3.4, donc partager la réponse ici fournit également une exposition pour un module solide pour montrer sa polyvalence et son utilisation pour des exigences plus complexes.
{}
sont pour le formatage des chaînes, que vous pouvez lire ici . En fin de compte, ce qui se passe est que le {}
get est remplacé par les variables transmises à la format
méthode. Ainsi, le premier {}
contiendra ce qui est dedans name_without_extension
, et le second contiendra le deuxième argument qui est simplement 1
.
os.rename(old, new)
Cela se trouve dans les documents Python: http://docs.python.org/library/os.html
Utilisez os.rename
. Mais vous devez passer le chemin complet des deux fichiers à la fonction. Si j'ai un fichier a.txt
sur mon bureau, je vais le faire et je dois aussi donner plein de fichiers renommés.
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()
à un répertoire, par exemple ce qui se passe sous Windows quand il s'agit d'un UNC? Et faire un chdir()
a des effets secondaires. Je préfère simplement spécifier les chemins nécessaires pour os.rename()
directement, pas d' chdir()
ing.
Vous pouvez utiliser os.system pour appeler le terminal pour accomplir la tâche:
os.system('mv oldfile newfile')
mv
un programme de ligne de commande intégré à unix pour déplacer / renommer un fichier.
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.path
et le moderne pathlib
est assez douteuse. Allez jusqu'au bout avec pathlib
.
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")
Cela devrait le faire. python 3+