Explorateur de fichier
Bonjour,
J'ai écrit un programme, mais quand j'ai deux fois le même nom, il me fait :
Si vous pouviez m'aider, ce serait vraiment gentil de votre part. Je dois le rendre demain matin.
J'ai écrit un programme, mais quand j'ai deux fois le même nom, il me fait :
test.txten
test_1.txt, et ensuite il fait
test_1_2.txtau lieu de passer directement à
test_2.txt.
Si vous pouviez m'aider, ce serait vraiment gentil de votre part. Je dois le rendre demain matin.
def renommer_fichier_2(self): self.nom = self.fenetre_renommer_entree.get() self.fichier_nouveau_nom = os.path.join(os.path.dirname(self.fichier_a_renommer), self.fenetre_renommer_entree.get()+os.path.splitext(self.fichier_a_renommer)[1]) print(os.path.dirname(self.fichier_a_renommer)) print(os.path.splitext(self.fichier_a_renommer)) print(self.fichier_nouveau_nom) self.fenetre_renommer.destroy() self.nombre = 1 try: os.rename(self.fichier_a_renommer, self.fichier_nouveau_nom) tmg.showinfo(title="Fichier renommé",message="Votre fichier a été renommé") except FileExistsError: while True: try: os.rename(self.fichier_a_renommer, os.path.join(os.path.dirname(self.fichier_a_renommer),self.nom+'_'+str(self.nombre)+os.path.splitext(self.fichier_a_renommer)[1])) tmg.showinfo(title="Fichier renommé",message="Votre fichier a été renommé") break except FileExistsError: self.nombre +=1
A voir également:
- Explorateur de fichier
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Explorateur de fichiers - Guide
- Comment réduire la taille d'un fichier - Guide
3 réponses
Bonjour,
Si j'ai bien compris ce que tu veux faire, j'utiliserais une expression régulière dont le but serait d'extraire (si on considère que le fichier s'appelle
Est-ce que ça te convient ?
Bonne chance
Si j'ai bien compris ce que tu veux faire, j'utiliserais une expression régulière dont le but serait d'extraire (si on considère que le fichier s'appelle
fichier_11.txt):
- tout ce qui est avant l'index (
prefix
), e.g.,fichier_
; - l'index (
index
), e.g.,11
; - tout ce qui est après l'index (
suffix
), e.g.,.txt
.
import re RE_INDEXED_FILENAME = re.compile(r"(.*)(\d)([.].*)") def increment_filename(filename): m = RE_INDEXED_FILENAME.match(filename) if not m: raise RuntimeError(f"Invalid filename: {filename}") (prefix, index, suffix) = (m.group(i) for i in range(1, 4)) index = int(index) return f"{prefix}{index + 1}{suffix}" filename = "fichier_11.txt" print(increment_filename(filename)) # Affiche fichier_12.txt
Est-ce que ça te convient ?
Bonne chance
Bonjour,
Personnellement, je n'ai pas compris ta question. Quels sont ces noms de fichiers dont tu parles ? Le code est incomplet et tu ne nous dit pas ce que tu veux faire. Essaye d'avoir un code minimal qui met en évidence ton problème et essaye d'expliquer clairement ce que tu veux faire (paramètres d'entrées, résultat attendu), sans quoi on peut difficilement t'aider...
J'ai l'impression que ton problème concerne les lignes 9 à 20. Indique les fichiers qui existe. Indique les renommages que tu tentes de déclencher et comment (en particulier, si le fichier cible existe) ils doivent être faits.
Bonne chance
Personnellement, je n'ai pas compris ta question. Quels sont ces noms de fichiers dont tu parles ? Le code est incomplet et tu ne nous dit pas ce que tu veux faire. Essaye d'avoir un code minimal qui met en évidence ton problème et essaye d'expliquer clairement ce que tu veux faire (paramètres d'entrées, résultat attendu), sans quoi on peut difficilement t'aider...
J'ai l'impression que ton problème concerne les lignes 9 à 20. Indique les fichiers qui existe. Indique les renommages que tu tentes de déclencher et comment (en particulier, si le fichier cible existe) ils doivent être faits.
Bonne chance
Bonjour,
Désolé de cette réponse tardive.
--------------------------------------------------------------------
--------------------------------------------------------------
Voici donc le script en question, et le soucis c'est que j'aimerais diviser le nom du fichier en trois parties c'est a dire : imaginons j'ai "Test_1.txt" j'aimerais le diviser en trois parties qui donnera "Test", "1", ".txt" pour que quand je modifie deux fois le même fichier qu'il me fasse "Test_2.txt".
Et dans mon script actuel quand j'ai une fois "Test_1.txt" et que je veux modifier le deuxième avec le même nom que le premier, il me fait "Test_1_1.txt" au lieu de "Test_2.txt".
Désolé de cette réponse tardive.
--------------------------------------------------------------------
from tkinter import * from tkinter import filedialog import os print("Liste des fichiers présents dans le dossier : ",os.listdir()) # ['aa.txt', 'bb.txt', 'operations_os_test.py'] def renommer_fichier(): global fichier_a_renommer fichier_a_renommer = filedialog.askopenfilename(title="Choisissez un fichier à renommer",filetypes=[("Tous les fichiers",".")]) print("Chemin complet du fichier : ",fichier_a_renommer) print("Chemin complet du dossier parent du fichier : ",os.path.dirname(fichier_a_renommer)) print("Tuple dossier parent et fichier + extension : ",os.path.split(fichier_a_renommer)) print("Tuple fichier et extension : ",os.path.splitext(fichier_a_renommer)) print("Extension : ",os.path.splitext(fichier_a_renommer)[1]) """ Chemin complet du fichier : C:/Users/fabrice/Desktop/dossier_test/bb.txt Chemin complet du dossier parent du fichier : C:/Users/fabrice/Desktop/dossier_test Tuple fichier et extension : ('C:/Users/fabrice/Desktop/dossier_test/bb', '.txt') Extension : .txt """ def renommer_fichier_2(): renommer_fichier() nouveau_nom = input("Le nouveau nom que vous avez choisi : ") try: fichier_nouveau_nom = os.path.join(os.path.dirname(fichier_a_renommer), nouveau_nom+os.path.splitext(fichier_a_renommer)[1]) os.rename(fichier_a_renommer, fichier_nouveau_nom) except FileExistsError: iteration = 1 while True: if nouveau_nom+"()"+str(iteration)+os.path.splitext(fichier_a_renommer)[1] in os.listdir(): iteration = iteration+1 else: break fichier_nouveau_nom = os.path.join(os.path.dirname(fichier_a_renommer), nouveaunom+""+str(iteration)+os.path.splitext(fichier_a_renommer)[1]) os.rename(fichier_a_renommer, fichier_nouveau_nom) renommer_fichier_2()
--------------------------------------------------------------
Voici donc le script en question, et le soucis c'est que j'aimerais diviser le nom du fichier en trois parties c'est a dire : imaginons j'ai "Test_1.txt" j'aimerais le diviser en trois parties qui donnera "Test", "1", ".txt" pour que quand je modifie deux fois le même fichier qu'il me fasse "Test_2.txt".
Et dans mon script actuel quand j'ai une fois "Test_1.txt" et que je veux modifier le deuxième avec le même nom que le premier, il me fait "Test_1_1.txt" au lieu de "Test_2.txt".
Comment pourrais-je l'intégrer dans mon script initiale?
Je ne comprends pas trop pourquoi dans ton script tu mémorises ces variables dans donc c'est pour ça qu'ici j'ai enlevé le qui les précédaient.
Bonne chance
Il me donne des erreurs.
Merci
Et le code concerné :
Et le code complet que j'ai :