Bonjour,
sous Ubuntu, j'ai des fichiers ou répertoires dont le nom a des caractères interdits comme '?' que je voudrais supprimer.
Mais listdir par exemple ne les contient même pas.
Comment faire ?
Merci pour votre aide
Version imprimable
Bonjour,
sous Ubuntu, j'ai des fichiers ou répertoires dont le nom a des caractères interdits comme '?' que je voudrais supprimer.
Mais listdir par exemple ne les contient même pas.
Comment faire ?
Merci pour votre aide
Bonjour,
J'adore python mais perso pour ce type de tache j'utilise le terminal.
t'effacera tous les fichiers et répertoires contenant un '?' situés dans le répertoire actuel.Code:rm -R *\?*
Edit: omission du '\' devant le '?'...
Salut,
Une RegEx peut le faire aussi.
Si tu tiens à rester sur du python regarde aussi le module glob ou la méthode glob() de pathlib(si tu l'utilises)...
merci pour toutes ces réponses.
Une précision : je ne veux effacer que le "?", pas le fichier.
Bonne soirée
Dans les grandes lignes:
Tu peux renommer les fichiers trouvés par exemple avec une compréhension de liste [nom for nom in resultats if '?' in nom] avec le nom du fichier auquel tu appliques replace('?', ''). Pathlib est fait pour manipuler les noms de fichier , c'est la bonne occasion d'apprendre à l'utiliser si tu ne l'utilises pas encore ... si tu galères, montre-nous.
édit: correction
suite...
Avec os.walk, les fichiers avec "?" dans le nom apparaissent.
Par contre, je ne vois pas trop comment glob peut aider.
Bonne soirée
Je fatigue, j'ai édité mon message. Bonne soirée également
Salut,
Le ? n'est pas interdit et os.listdir l'affiche.
J'ai été confronté à ce problème avec mon appli Qarte, puisqu'il s'agit de nommer des fichiers avec le titre des vidéos.
Et on trouve de tout dans les titres de films.
À ce jour j'ai recensé: /, », «, \\ et ".
Tu devras aussi faire attention au fait que si tu changes le nom d'un fichier tu risques d'utiliser un nom existant déjà et Python ne te le dira pas, il écrasera silencieusement l'autre fichier.
merci pour ce riche retour.
Je suis sous Ubuntu et j'ai testé listdir avec un répertoire contenant un sous-répertoire avec '?' dans son nom.
Sauf erreur de ma part, il n'était pas listé par listdir.
Je referai le test pour vérifier.
Dans mon cas, ce ne sont pas les noms de films, mais de chansons..., créés par le logiciel de numérisation.
Bonne soirée
Hello,
@Hominidé,
J'ai tendance à dire que python évite de devoir réécrire en batch un code bash si on veut que ça fonctionne sous Windows, la portabilité n'est pas toujours la première pensée...Citation:
J'adore python mais perso pour ce type de tache j'utilise le terminal.
Pour la commande, j'avoue que le 1er Post du PO n'est pas clair et que ça peut porter à confusion. Preuve que poser la problématique de manière claire c'est important !
@jam7575,
Eh oui, 5h de perdu...Citation:
Une précision : je ne veux effacer que le "?", pas le fichier.
En validant le choix python, un nom de fichier reste une chaîne de caractères. Vous avez plusieurs possibilités pour "modifier" une chaîne de caractères et des modules qui vous permettront de modifier un fichier comme vous le souhaiteriez.Citation:
j'ai des fichiers ou répertoires dont le nom a des caractères interdits comme '?' que je voudrais supprimer
Je ne crois pas avoir vu un début de code de votre part, alors que ce genre d'exercice est très courant dans les tutoriels.
Bonjour
Chez moi aussi j'ai testé, créé un fichier "xxx?" et os.listdir l'affiche parfaitement. C'est d'ailleurs tout à fait compréhensible vu que le caractère "?" (qui, contrairement à ce qui est écrit dans le titre du topic, n'est pas un caractère "interdit" mais un caractère "spécial" et "spécial" parce qu'interprété) est interprété par le shell et pas par Python. Et même en shell il est interprété à l'entrée, pas à la sortie => un "ls" ou autre affichera parfaitement les "?" présents dans le nom du fichier.
Pour le reste tout à été dit. Et moi aussi, sauf s'il y a des contraintes non dites ici (portabilité, intégration, etc), je conseillerais le shell plutôt approprié pour ce genre de travail.
Bonjour.
mon Kdo de Noël :
Avec la commande rename (à installer si nécessaire: sudo apt install rename)
depuis le répertoire concerné:
La commande est une simulation, tu peux donc l'exécuter sans risque . Si cela te convient tu enlèves l'option -n pour que la commande renomme réellement tes fichiers.Code:rename -n 's/\?//g' ./*
La commande va chercher tous les fichiers contenant un ou plusieurs '?' du répertoire en cours, et les renomme sans le ou les '?'
Merci,
je connais rename en effet,mais je cherchais (ce qui marche avec walk) à identifier les fichiers avec "?", avant de les renommer.
Bonnes fêtes