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 :

Ensemble de variable


Sujet :

Python

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut Ensemble de variable
    Bonjour, je cherche à éliminer toutes les lignes d'un fichier qui contiennent des minuscules.

    Mon code est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    with open("Mots.txt","r+") as f:
        new_f = f.readlines()
        f.seek(0)
        for line in new_f:
            if "a" and "b" and "c" ...  and "z"  not in line:
                f.write(line)
        f.truncate()

    Ce code fonctionne bien mais en connaitriez-vous un autre qui évite d'écrire toutes les lettres alphabétiques une à une ( if "a" and "b" and "c" ... and "z")?

    Merci d'avance de votre réponse.
    Cordialement,
    Arsène

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

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    Bonjour,
    Pourquoi ne pas utiliser de regex ?
    If not re.match('[a-z]', line):

  3. #3
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Bonjour

    Citation Envoyé par Arsene12 Voir le message

    ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    with open("Mots.txt","r+") as f:
        new_f = f.readlines()
        f.seek(0)
        for line in new_f:
            if "a" and "b" and "c" ...  and "z"  not in line:
                f.write(line)
        f.truncate()
    Ce code fonctionne bien mais ...
    Non ! Seules les lignes ne contenant pas 'z' sont ré-écrites.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> if 'a' and 'b' and 'c' not in 'baba':
    ...     print("yep")
    ... 
    yep
    >>>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if 'a' and 'b' and 'c' not in 'baba':
    est équivalent à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if 'a' != '' and 'b' != '' and 'c' not in 'baba':

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 699
    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 699
    Par défaut
    Salut,

    Citation Envoyé par Arsene12 Voir le message
    Ce code fonctionne bien mais en connaitriez-vous un autre qui évite d'écrire toutes les lettres alphabétiques une à une ( if "a" and "b" and "c" ... and "z")?
    Votre code ne fonctionne pas car "a" and "b" and "c" ... and "z" vaut "z" et ne testera que "z" not in line... vous pouvez écrire une fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def has_lowercase(s):
          for ch in s:
               if 'a' <= ch <= 'z':
                   return True
    où utiliser any( 'a' <= ch <= 'z' for ch in line).

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

  5. #5
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Si on a à travailler beaucoup avec la notion de lettres minuscules, on peut aussi imaginer un code utilisant une constante MINUSCULES définie par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> MINUSCULES = [chr(ord('a')+i) for i in range(26)]
    >>> MINUSCULES
    ... ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
    voire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> MINUSCULES = set([chr(ord('a')+i) for i in range(26)])
    >>> MINUSCULES
    ... >>> MINUSCULES
    {'p', 'e', 'j', 'l', 'h', 'f', 'r', 'v', 'i', 'x', 'z', 'y', 'b', 'q', 'k', 'o', 'w', 'g', 'u', 'n', 't', 'c', 'a', 's', 'd', 'm'}

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Merci beaucoup pour vos réponses qui m'ont apporté la solution.

    J'avais voulu au dépard utiliser "or" dans ma formule if "a" or "b" or "c". Comme ça marchait pas j'ai utiliser le "and" et j'ai cru à tort que ça marchait alors que ça ne prenait effectivement en compte que le dernier terme.

    Le bon code est donc le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    f2=open("TexteAvecMinuscules.txt","w",encoding="utf-8")
    with open("MonTexte.txt","r+") as f:
        new_f = f.readlines()
        f.seek(0)
        for line in new_f:      
    1ère solution:  result = re.match('[a-z]', line)
    2ème solution:  result = any( 'a' <= ch <= 'z' for ch in line)
           if result:     
            f2.write(line)
    f2.close()

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 699
    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 699
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    Le bon code est donc le suivant
    Sauf qu'avec l'Unicode, les "minuscules" ne se réduisent pas aux minuscules ASCII...

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

  8. #8
    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,

    Au cas où il faudrait tenir compte des minuscules accentuées avant de faire le traitement prévue, on peut préalablement supprimer les accents sur les minuscules en utilisant la fonction suivante:

    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
    # -*- coding:utf-8 -*-
    # Python 3
     
    from unicodedata import normalize, category
     
    def sansaccentmin(ch):
        """Retourne la chaine ch sans les éventuels accents sur les minuscules
           Utilise normalize et category du module unicodedata
        """
        r = ""
        for car in ch:
            carnorm = normalize('NFKD', car)
            if category(carnorm[0])=="Ll": # => Letter lowercase
                r += carnorm[0] # ajoute le caractère sans accent
            else:
                r += car
        return r
    Application:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ch = "€aAàÀâÂäÄåÅæÆbBcCçÇdDeEéÉèÈêÊëËfFgGhHiIîÎïÏjJkKlLmMnNoOôÔöÖœŒpPqQrRsStTuUùÙûÛüÜvVwWxXyYÿŸzZ"
    print(sansaccentmin(ch))
    €aAaÀaÂaÄaÅæÆbBcCcÇdDeEeÉeÈeÊeËfFgGhHiIiÎiÏjJkKlLmMnNoOoÔoÖœŒpPqQrRsStTuUuÙuÛuÜvVwWxXyYyŸzZ

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/08/2012, 14h55
  2. Réponses: 3
    Dernier message: 22/02/2012, 20h48
  3. Réponses: 2
    Dernier message: 10/02/2010, 11h06
  4. Avoir la liste dans l'ensemble des variables définies
    Par Jonathan.b dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 04/02/2010, 21h11
  5. [Info]Modifier un ensemble de variable
    Par kaiser2003 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 07/09/2005, 15h53

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