Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 28-01-2022 14:44:11

saske
Invité

python fichier csv

Bonjour ,
j'ai une petite question j'essaie d'automatiser un process mais j'ai des blocages par rapport à deux trucs
imaginons que j'ai un mail brics@gmail.gouv.com , comment je pourrai extraire de ce mail que les charactères compris entre le @ et le dernier point? je pense que c'est possible avec plusieurs boucles mais je pense aussi que en quelques ligne c'est faisable non?
et deuxième chose (pour ceux qui se connaissent en dataframe)  comment concatener deux valeurs de deux colones differentes dans une autre colonne , pas des valeurs numérique

#2 28-01-2022 15:21:55

saske
Invité

Re : python fichier csv

si j'avais juste comme mail a=saske@gmail.com , a.split('@')[1].split('.')[1] aurait  suffit

#3 28-01-2022 19:26:35

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 17 385

Re : python fichier csv

Bonjour,

'ai un mail brics@gmail.gouv.com , comment je pourrai extraire de ce mail que les charactères compris entre le @ et le dernier point?

Appelons un chat un chat :  brics@gmail.gouv.com n'est pas un mail, mais une adresse mail...
si tu veux pouvoir récupérer dans ton exemple : gmail.gouv

adresse="brics@gmail.gouv.com"
l1,l2=1+adresse.find("@"),len(adresse)-4
print(adresse[l1:l2]

Sortie :
gmail.gouv

Avec
adresse= "jules_louis@truc-bidule.bip-machin.org"
J'obtiens :
truc-bidule.bip-machin

As-tu testé ta proposition ?
Je pense que non.
En effet :

>>> a="saske@gmail.com"
>>> a.split('@')[1].split('.')[1]
'com'
 

Tu as un fichier .csv.
Il te faut l'ouvrir, puis le lire ligne par ligne : chaque ligne est une liste de string.

Mettons un fichier qui comprenne les colonnes :
Nom  Prénom  Adresse1  Adresse2 CP  Ville
Supposons que tu veuilles concaténer les colonnes 4 et 5 de la ligne L suivante. :
L=["LADOUMEGUE","JULES","LES POMMIERS","2 RUE DU CHAT QUI MIAULE", "30330","FELINVILLE"]

Concaténer est donc très simple :

L=L.append(L[4]+" "+L[5])

Et la ligne L devient :
['LADOUMEGUE', 'JULES', 'LES POMMIERS', '2 RUE DU CHAT QUI MIAULE', '30330', 'FELINVILLE', '30330 FELINVILLE']
(L'espace pour la lisibilité dans mon exemple)


Si tu veux un fichier possédant une colonne de plus pour chaque ligne, il te faut ouvrir le fichier d'origine en lecture et récrire ligne après ligne, chaque ligne modifiée (ou non) dans un nouveau fichier .csv.

Si tu veux d'autres infos, n'hésite pas.

@+

Hors ligne

#4 28-01-2022 20:03:40

saske
Invité

Re : python fichier csv

Bonjour

a.split('@')[1].split('.')[0]

était la bonne formule (j'ai bricolé entre temps la fonction pour voir si j'y arrivais pas )

Appelons un chat un chat :  brics@gmail.gouv.com n'est pas un mail, mais une adresse mail...
 

c'est noté :)
merci pour la concatenation je pense avoir compris
par contre pour le mail justement , l'algo ne marchera pas par exemple si l'hébergeur du mail est ".fr"  par exemple , c'est pour ça que initialement j'avais pris le dernier point pour référence;

#5 28-01-2022 21:14:03

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 17 385

Re : python fichier csv

Re,

J'ai testé ta proposition :

>>> a="jules_louis@truc-bidule.bip-machin.fr":
>>> a.split('@')[1].split('.')[0]
truc-bidule

Là, ça ne marche pas, même si c'est très intéressant : j'ai appris quelque chose.

Sinon, je modifie ma première proposition pour quelle s'adapte aux cas extrêmes.
   * Lire l'adresse à l'envers : donc le dernier point se trouve être le premier.
      Exemple :
      "brics@gmail.gouv.com"[::-1] donne rf.vuog.liamg@scirb     
   * Lire alors la position de ce point :
      "brics@gmail.gouv.com"[::-1].find(".") et j'ajoute 1
   *  Je soustrais la valeur calculée à la longueur de l'adresse pour avoir l2.
   * j'extrais le slice de l'adresse entre l1 et l2
     
Voilà :
Exemple1 :


>>> adresse ="brics@gmail.gouv.com"
>>> l1,l2=1+adresse.find("@"), 1+adresse.find("@"),len(adresse)-(1+adresse[::-1].find("."))
>>> print(adresse[l1:l2]
gmail.gouv

Exemple2 :

>>> adresse="jules_louis@truc-bidule.bip-machin.fr"
>>> l1,l2=1+adresse.find("@"),len(adresse)-(1+adresse[::-1].find("."))
>>> print(adresse[l1:l2])
truc-bidule.bip-machin

Un bémol : l'adresse bidon que j'utilise ici ne doit pas être "légale" : j'ai 2 points dans la partie qui suit le @...
Mais mes deux lignes (une de plus que toi) font le boulot quand même...

@+

Hors ligne

#6 29-01-2022 15:23:27

saske
Invité

Re : python fichier csv

Parfait ça résous mes principaux problèmes pour la suite merci yoshi !

#7 30-01-2022 13:55:24

saske
Invité

Re : python fichier csv

re yoshi , vous utilisez quel IDE pour vos scripts? en essayant votre code pour recuperer le domain de l'email (l'exemple 1 et 2) j'obtient comme erreur

ValueError: too many values to unpack (expected 2)

par rapport à la ligne 2

#8 30-01-2022 13:57:51

saske
Invité

Re : python fichier csv

update l'exemple 2 marche

Réponse rapide

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
soixante huit plus soixante dix-huit
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Pied de page des forums