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 :

Récupérer une ligne de texte en suivant une autre.


Sujet :

Python

  1. #1
    Membre confirmé
    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
    Points : 460
    Points
    460
    Par défaut Récupérer une ligne de texte en suivant une autre.
    Bonjour à tous,
    je viens vers vous car je rencontre un problème de récupération d'information.

    Je voudrais récupérer la ligne suivant la ligne Track type: video.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    |  + Track type: video
    |  + Lacing flag: 0
    |  + MinCache: 1
    |  + Codec ID: V_REAL/RV40
    |  + CodecPrivate, length 34
    |  + Default duration: 40.000ms (25.000 frames/fields per second for a video track)
    |  + Video track
    ...
    |  + Track type: audio
    |  + Codec ID: A_AAC
    |  + CodecPrivate, length 5
    |  + Default duration: 46.440ms (21.533 frames/fields per second for a video track)
    |  + Language: fre
    |  + Name: Français
    |  + Audio track
    Venant de Kubuntu, voilà comment je procède : via sed je recherche Track type: video, je charge les lignes suivantes et travaille sur le tout, mais je ne sais pas comment arriver au même résultat en python.

    J'ai également pensé à une technique utilisant une variable qui se remplirait d'une info lorsque une boucle traiterait mon fameux Track type: video, récupérerait la valeur des fps suivante et bloquerait la suite des infos via un test dans la boucle.
    Mais ça me parait compliqué et franchement pas très propre...

    Merci à vous !
    Sous Kubuntu 20.04

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    L'objectif de faire ces récupérations d'informations est-il de les réutiliser pour utiliser d'autres fonctions python ?

    Parce-que si ce n'est pas le cas, autant le faire directement en bash voir même, peut-être qu'une solution est existante avec le logiciel (mplayer ?) lui même...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Membre confirmé
    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
    Points : 460
    Points
    460
    Par défaut
    Cela me permettrait d'approfondir mes connaissances (découvrant depuis peu python), cela me permettrait de me passer de bash (dommage d'utiliser bash pour une simple récupération de donnée) et en effet de le réutiliser plus loin dans mon logiciel python (en cours de conversion Bash/GTK => PyQt4).

    J'aimerai que le logiciel puisse me renvoyer directement ce que je veux mais ce n'est pas inclu dedans (mkvinfo)
    Sous Kubuntu 20.04

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Elles apparaissent où ces lignes ?

    Dans la console quand tu lances la commande MKV... ? parce qu'alors tu peux aussi lire ces lignes de la même façon que tu le fais pour le pourcentage.

  5. #5
    Membre confirmé
    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
    Points : 460
    Points
    460
    Par défaut
    non c'est contenu dans une variable.

    Je récupère des infos que je réutilise à différents endroits/moments.
    Sous Kubuntu 20.04

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Une variable, d'accord mais comment ? Une chaîne de texte ?

    Comment retrouves-tu ce texte dans ton code Python ?

  7. #7
    Membre confirmé
    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
    Points : 460
    Points
    460
    Par défaut
    Voici ma commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TracksInfo = subprocess.check_output(["env", "LANGUAGE=en", "mkvinfo", Configs["MKVLink"]], universal_newlines=True)
    TracksInfo = list(TracksInfo.split("\n"))
    Apres on passer par une variable normale si c'est plus pratique qu'une liste...
    Sous Kubuntu 20.04

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Python inclut le module "re" qui permet de faire ce qu'on fait avec sed, grep,...
    Pour recuperer, le contenu du premier "Default duration:" suivant "Track type: video" la regexp pourrait etre de la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs = r'Track type: video.*?Default duration: ([^\n]+\n)'
    Ce qu'on veut récupérer est ([^\n]+)\n i.e. la fin de la ligne (mais on peut être plus précis).
    Le tout en code, ca donnerait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    buffer = '''
    Track type: video
    Lacing flag: 0
    MinCache: 1
    Codec ID: V_REAL/RV40
    CodecPrivate, length 34
    Default duration: 40.000ms (25.000 frames/fields per second for a video track)
    Video track
     
    Track type: audio
    Codec ID: A_AAC
    CodecPrivate, length 5
    Default duration: 46.440ms (21.533 frames/fields per second for a video track)
    Language: fre
    Audio track'''
     
    import re
     
    rs =r'Track type: video.*?Default duration: ([^\n]+)\n'
    rg = re.compile(rs, re.S)
     
    match = rg.search(buffer)
    print ('/%s/' % match.groups()[0])
    C'est un peu différent que ce que vous faites.
    A vous de voir.

    - W
    PS: Personnellement je validerais le semblant de marqueurs de records (Track type: video .... Video track) (Track type: audio .... Audio track. Ca permettrait de valider qu'on a un machin pas trop mal forme puis piocher la key: value a l’intérieur.
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre confirmé
    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
    Points : 460
    Points
    460
    Par défaut
    Merci, cela marche bien mais j'ai quelques questions
    pourquoi l'utilisation de variables nommées :
    - rs
    - rg

    Et que veut dire re.S dans la commande :
    et dans le cas ou j'utiliserai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs =r'Default duration: [^(]+\(([^ ]+) '
    Il devrait me trouver plusieurs correspondances, peut-il toutes me les renvoyer ?

    merci
    Sous Kubuntu 20.04

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par hizoka Voir le message
    pourquoi l'utilisation de variables nommées :
    - rs
    - rg
    C'est un exemple code sur un coin de table.
    Il vous montre juste comment faire. A vous d'en faire ce que vous voulez.

    Et que veut dire re.S dans la commande :
    La documentation est ici.
    Ca permet de traiter les \n.


    et dans le cas ou j'utiliserai :
    rs =r'Default duration: [^(]+\(([^ ]+) '
    Il devrait me trouver plusieurs correspondances, peut-il toutes me les renvoyer ?
    .search ne retournera que la première occurrence.
    .findall ou .finditer sont plus adaptes dans ce cas.
    (Et plus besoin du re.S dans ce cas).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Membre confirmé
    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
    Points : 460
    Points
    460
    Par défaut
    Merci pour les précisions
    Sous Kubuntu 20.04

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 07/12/2007, 20h48
  2. Recupere une info suivant une ligne dans un texte.
    Par cyrilthebest8 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 15/12/2006, 18h04
  3. [ADO.NET] récupérer la valeur de la clé d'une ligne insérée
    Par colombero dans le forum Accès aux données
    Réponses: 2
    Dernier message: 07/12/2006, 23h56
  4. [graphique]texte parallele a une ligne
    Par Malo dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 15/02/2006, 02h15
  5. [HTML][DEBUTANT] centrer une ligne de texte.
    Par heider dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 20/11/2005, 16h15

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