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 :

extrait d'un élément dans string


Sujet :

Python

  1. #1
    Membre à l'essai
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Septembre 2018
    Messages : 27
    Points : 20
    Points
    20
    Par défaut extrait d'un élément dans string
    Bonjour,

    Dans un fichier, je vais extraire l'heure (par ex. 18 dans l'exmple ci-dessous) dans les lignes qui commence par "From". Une fois je recupure l'heure, je compte le nombre de fréquences des heures pour mettre dans un dictionnaire dans lequel il y aura l'heure comme clé, et sa fréquence comme valeur.

    From louis@yahoo.com Fri Jan 4 18:10:48 2018
    Je vais faire deux split (dans la ligne 9 du code ci-dessou). Comment puis je faire le 2e split que le délimiteur est ":" ?
    Dans mon code, la variable "item" est une liste, je ne peux pas faire un 2e split pour récupérer l'heure.
    Je crois que l'on ne peut pas faire split avec une liste.

    Merci de votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    name = input("Enter file:")
     
    fh = open(name, 'r')
     
    time = list()
    hr = list()
    for line in fh :
    	if line.startswith('From '):
    		item = line.split()
    		time.append(item[5])

  2. #2
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut
    Bonjour,

    Un moyen efficace et robuste serais d'utiliser des regex, sinon quelques pistes:

    collections.Counter
    les slices
    les listes en compréhension.

    sinon pour votre incompréhension vous dites qu'on ne peux pas utiliser split() sur une liste, or la ligne d'après vous arrivez bien à accéder à un élément de la liste.
    en d'autre terme rien ne vous empêche de faire heure = line.split()[5].split(":")[0] ou utiliser les regex qui serais vraiment un must have dans se genre de chose, bien sur c'est plus complexe à utiliser mais rien d'insurmontable avec un peu de patience, de pratique et test.

  3. #3
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    comme indiqué par flapili, un exemple d'utilisation des regex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> import re
    >>> line = 'From louis@yahoo.com Fri Jan 4 18:10:48 2018'
    >>> z = re.match(r'^From .+ (?P<heure>\d\d):(?P<minute>\d\d):(?P<seconde>\d\d)', line)
    >>> z.groupdict()
    {'heure': '18', 'minute': '10', 'seconde': '48'}

  4. #4
    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
    Aller un truc tout moche pour le fun

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> s = "From louis@yahoo.com Fri Jan 4 18:10:48 2018"
    >>> heure, *_ = s.split()[-2].split(':')
    >>> heure
    '18'
    Les expressions régulières n'étant pas maîtrisé par tous, voici une explication de ma ligne en décortiquant,

    Découpage de la chaîne dont le séparateur est le caractère espace ' '.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> s = "From louis@yahoo.com Fri Jan 4 18:10:48 2018"
    >>> s.split()
    ['From', 'louis@yahoo.com', 'Fri', 'Jan', '4', '18:10:48', '2018']
    On récupère l'horaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> s.split()[-2]
    '18:10:48'
    On découpe avec split et le caractère de séparation ':'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> s.split()[-2].split(':')
    ['18', '10', '48']
    Par unpacking, je récupère l'heure (seule la 1ère valeur compte, le reste ne m'intéresse pas)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> heure, *_ = s.split()[-2].split(':')
    >>> heure
    '18'
    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)

  5. #5
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    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 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Si on est sûr que le nombre cherché est bien juste avant le 1er ':' de la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne.partition(':')[0][-2:]
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/09/2018, 21h26
  2. Tri par insertion des éléments dans un vector<string>
    Par Rony Rauzduel dans le forum Débuter
    Réponses: 4
    Dernier message: 21/08/2016, 17h38
  3. insérer des éléments dans une string
    Par salyiohh dans le forum Langage
    Réponses: 2
    Dernier message: 23/06/2015, 12h07
  4. Réponses: 14
    Dernier message: 01/12/2003, 17h47

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