IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Problème de guillemet dans un nom de fichier


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut Problème de guillemet dans un nom de fichier
    Bonjour et bon dimanche,

    je rencontre un problème dans un soft que je développe.

    Le principe est de choisir un fichier et de lancer un commande de type QProcess (pareil avec un SubProcess).

    Voici le petit code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.process.start('env LANGUAGE=en mkvinfo "{}" '.format(File))
    Ca fonctionne très bien avec tous les caractères sauf 1, les guillemets ". Si File en contient un, le process ne fonctionne plus.
    J'ai voulu faire un replace('"', '\"') mais pas de changement...
    Idem en essayant de jouer avec """ ou ''' mais rien n'y fait...

    L'adresse qui en ressort n'est pas bonne puisqu'un " se ballade dedans, de ce fait, bash est paumé et n'arrive pas à lancer la commande...

    Avez vous une solution simple pour régler ce problème ?

    Merci à vous et bonne fin de week end.

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour hizoka,

    Je n'ai pas le problème, puisque le guillemet est interdit dans les noms de fichier sous Windows (comme: \ / : * ? < > | ), et je ne suis pas sûr que ce soit une bonne idée dans les autres OS, ne serait-ce que pour permettre les partages...

    Essaie tout de même de doubler le guillemet?

  3. #3
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    Une mauvaise idée oui, mais pas interdit sous linux.
    commande '/home/hizoka/"oui".txt' fonctionne tres bien :p

    Un double guillemet dans le nom du fichier ?
    Si c'est ça, j'ai déjà tester :p

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Attention: il ne s'agit pas de renommer le fichier mais de modifier son appel.

    Je viens de faire un petit essai sur mon Linux (Mint v17.3 bureau Cinnamon):

    Soit un fichier qui s'appelle: toto"tata.txt (quelle imagination...)

    Dans une console, j'appelle (gedit est l'éditeur de texte):

    ça ne marche pas: l'éditeur ouvre le fichier tototata.txt, donc un autre.

    J'appelle ensuite:

    Là, ça marche! l'éditeur appelle bien le fichier toto"tata.txt, permet de le modifier, etc...

    Ok?

  5. #5
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Si tu veux obtenir un antislash dans une chaîne tu dois l'échapper (donc le doubler).
    Essaie: self.process.start('env LANGUAGE=en mkvinfo "{}" '.format(File.replace('"', '\\"')).

    Tu devrais obtenir une chaîne avec un antislash (littéral) qui une fois passé au sous-shell sera vu comme le caractère d'échappement.

    À ta place je n'utiliserai pas les doubles quotes dans le shell car certains éléments d'une chaîne entre doubles quotes peuvent être interprétés. Par exemple si tu as un nom de fichier comportant un $, celui-ci sera vu comme le début d'un nom de variable. Il serait plus sûr d'utiliser des simples quotes:

    self.process.start('env LANGUAGE=en mkvinfo \'{}\' '.format(File.replace("'", "\\'"))

  6. #6
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    tout a fait il faut l'échapper sauf que j'obtiens :
    \\" et non \" en utilisant replace('"', '\\"'), j'étais parti là dessus directement mais impossible à faire fonctionner...
    c'est pour ça que je demande conseil

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> a='fichier "bidon".mkv'
    >>> a.replace('"', '\"')
    'fichier "bidon".mkv'
    >>> a.replace('"', '\\"')
    'fichier \\"bidon\\".mkv'

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/01/2012, 15h43
  2. Incrémenter un n° dans un nom de fichier
    Par pandore dans le forum Fortran
    Réponses: 6
    Dernier message: 03/05/2006, 11h30
  3. [DOM] Problème d'accent sur les noms de fichier avec mon parseur
    Par ujoodha dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 06/04/2006, 21h55
  4. Réponses: 17
    Dernier message: 12/04/2005, 15h28
  5. problème de guillemets dans une formule shell
    Par dim_italia dans le forum VBA Access
    Réponses: 7
    Dernier message: 18/08/2003, 12h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo