Flux rss
Collection CommentCaMarche.net
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

[Python] manipuler un string

keloss, le samedi 3 décembre 2005 à 17:30:29
Cher CCM-eurs

Je suis (encore!) debutant en Python, je cherche transformer une string contenant des nombres et des virgules, points-virgule, \n ou \t en une liste de nombres.

La methode .split ne prend qu'un argument: je ne peux qu'enlever un des elements sus-mentionne..

J'ai essaye d'utiliser les expressions regulieres. Mais je n'arrive pas a faire que re.split enleve tous les elements [,;\n\t]

J'ai tente d'utiliser re.sub pour remplacer ces elements par des espaces (que j'evacue plus tard de la liste avec string.remove)

Encore une fois je n'arrive pas a faire un pattern qui remplace tous les caracteres voulus. Je dois le faire un par un..

Question:

Y a-t-il moyen de faire plus vite? Une expression reguliere pour faire tout ca? Ou mieux une methode de string?

Merci d'avance,

PS; desole pour les accents: je ne maitrise pas le qwerty
<hs>je lisais les premiers episodes de Phrack, la partie PWN en particulier fait vraiment conquete de l'ouest! Tres divertissant</hs>
Répondre à keloss  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kilian, le samedi 3 décembre 2005 à 18:07:16
Salut,

Tout d'abord tu crées une liste de chiffre (mais en caractères):
chiffres= ('1','2','3','4','5','6','7','8','9')

Metton que tu aies cette chaine à vérifier:
chaine="jsldkgh\rm.qeigj534qshfsgn\n"

Il suffit de faire un test d'appartenance à chiffres pour chaque caractère, et si un élément n'appartient pas à chiffres, on l'élimine.
for caractere in chaine:
        if not caractere in chiffre:
                 chaine=chaine.split(caractere)
                 chaine="".join(chaine)


Et voilà.
Il doit y avoir plus rapide je pense....
Répondre à kilian

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
keloss, le samedi 3 décembre 2005 à 18:22:43
--Kilian:

Merci pour cette reponse eclaire! Je vous tiens au courant..

Je precise, en fait j'essaie d'ecrire un programme pour faire un regression lineaire:

Il faut ouvrir un fichier de donnees (juste des coordonnees). Comme file.read() pond une string, je dois en extraire les coordonnees que je vais mettre dans une liste.

Ensuite on verra pour la manipulation des donnees..
Répondre à keloss

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kilian, le dimanche 4 décembre 2005 à 22:59:01
Ok. Ben si tu as un soucis n'hésite pas ....
Répondre à kilian

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Bob El Ahn, le mardi 6 décembre 2005 à 17:09:49
Coucou, re,

Dans mon programme (ich bin keloss) je tente de separer une liste en deux: avec un sur 2 elements de la premiere liste dans chaque liste fille.

J'ai commence par faire:
def getxnylist(listemere):
       xlist = [n for n in listemere if listemere.index(n) % 2 == 0]
       ylist = [n for n in listemere if listemere.index(n) % 2 != 0]
       return xlist, ylist


Ahem, evidemment si on a 2 fois le meme element dans la liste mere ca fausse tout..

J'ai donc ruse:
def getxlist(firstlist):
        lx = []
        if firstlist:
                lx = [firstlist[0]] + getxlist(firstlist[2:])         
        return lx               

def getylist(firstlist):
        ly = []
        if firstlist:
                ly = [firstlist[1]] + getylist(firstlist[2:])
        return ly
        
def getxnylist(firstlist):
        """Creates two lists. Each list has one out of two elements of the first list.
        
        The first list will represent x-values, the second  y-values."""
        lx = getxlist(firstlist)
        ly = getylist(firstlist)
        return lx, ly    

Notez la fonction recursive ;-) (en fait j'avais survole le manuel de Ocaml juste avant).

Mais y a-t-il une technique plus rapide (un moyen de slicer une liste avec un pas defini?), plus malin, plus cool: un truc qui pythonne?!

Peace, ~Wonderful Bangladesh~
Répondre à Bob El Ahn

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Bob El Ahn, le mardi 6 décembre 2005 à 17:15:53
Bon mais j'ai tout de meme une beta-beta version a vous offrir (pour ces foules silencieuses qui attendaient un programme de regression lineaire..)
import sys

def main():
        """Will calculate a simple linear regression."""
        try:
                filename = raw_input("Which file to import? ")
                f = open(filename, "r")
                try:
                        stringdata = f.read()
                        f.close()
                        okdata = convert(stringdata)
                        xlist, ylist = getxnylist(okdata)
                        T = len(xlist)
                        Ex = sum(xlist)
                        Ey = sum(ylist)
                        Exsq = listsqsum(xlist)
                        Exy = listxysum(okdata)
                        b2 = (T*Exy - Ex*Ey)/(T*Exsq - Ex**2)
                        b1 = (Ey/T) - b2*(Ex/T)
                        print "yt = " + str(b1) + " + (" + str(b2) + ")Xt"                 
                except ValueError:
                        print "Invalid values in there, sorry, only take numbers.."
                        sys.exit()                
        except IOError:
                print "File does not exist!"
                sys.exit()
                
def convert(ustring):
        """Formats input text file into a list of floating numbers.
        
        Admits anything as separators between numbers but '.'. Will take all nu-
        bers in consecutively, ignoring anything in between. Make sure your x-values
        are first."""
        accepted = ('.', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9')
        
        for char in ustring:
                if not char in accepted:
                        ustring = ustring.split(char)#knock off anything not in
                        ustring = " ".join(ustring)#accepted, replace by whitespace
                        
        ustring = ustring.split()#then split on whitespace
                       
        ustring = [float(num) for num in ustring]#make sure numbers are decimals
        
        return ustring

def alternativeconvert(ustring):
        """Formats through regular expression."""
        pat = re.compile('[^0-9.]')#import re..
        ustring = re.split(pat, ' ', ustring)
        ustring = ustring.split()
        ustring = [decimal.Decimal(num) for num in ustring]#import decimal..
        return ustring
        
def getxlist(firstlist):
        lx = []
        if firstlist:
                lx = [firstlist[0]] + getxlist(firstlist[2:])         
        return lx               

def getylist(firstlist):
        ly = []
        if firstlist:
                ly = [firstlist[1]] + getylist(firstlist[2:])
        return ly
        
def getxnylist(firstlist):
        """Creates two lists. Each list has one out of two elements of the first list.
        
        The first list will represent x-values, the second  y-values."""
        lx = getxlist(firstlist)
        ly = getylist(firstlist)
        if len(lx) != len(ly):
            print "Missing coordinates.. Make sure you have pairs."
            sys.exit()
        else:
            pass
        return lx, ly                  
        
def listsqsum(l):
        """Sums the squares of the elements of a list."""
        total = 0
        if l:
                total = (l[0])**2 + listsqsum(l[1:])
        return total
        
def listxysum(l):
        """Sums the product of the l-list elements two by two."""
        total = 0
        if l:
                total = l[0]*l[1] + listxysum(l[2:])
        return total
        
if __name__ == "__main__":
        main()

        
#TODO:
#code a general summation function --> summation(expression, indexstart, indexstop)
#as yet one can only calculate y=b1+b2x --> allow for different transformations on x
#expand simple linear regression to multiple regression
#add standard errors, R**2 and other interesting values

#def summation(expr, i=0, n):

Bon c'est un debut :-(

Sinon est-ce que quelqu'un connait un bon tuto sur les librairies standard, comme sys et os: ca m'a l'air vachement marrant, j'ai hate de tester les system calls et les flags et tout et tout (nohup here i come!).

Peace, ~Wonderful Bangladesh~
Répondre à Bob El Ahn

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kilian, le mardi 6 décembre 2005 à 20:41:01
Oui il y a un truc plus cool en quelques sortes :-)

def getxlist(firstlist):
        return firstlist[::2]

def getylist(firstlist):
       return firstlist[1::2]


Pour une liste ou une chaîne tu as
liste [premier index : dernier index : tous les n index]

Par exemple si
liste=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Voilà ce que donneront quelques tests:
liste [1:-2:2] donnera [1, 3, 5, 7]
C'est à dir liste à partir du second caractère jusqu'au -2 ème (un nombre négatif, ça signifie en partant de la fin) et tous les deux index.

Si tu ne mets rien sauf dans le troisième indice: liste [::2], alors il considèrera depuis le premier caractère jusqu'au dernier et tous les deux caractères.

Tu as je ne sais combien de combinaisons.... :-)
Répondre à kilian

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kilian, le mardi 6 décembre 2005 à 20:48:09
Ah et si tu mets un nombre négatif dans le troisième indice:
liste [::-2]

Alors il te ressortira la liste tous les deux éléments et à l'envers :-)

Ca pythonne comme il faut!
Répondre à kilian

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 keloss, le mercredi 7 décembre 2005 à 11:02:47
Excellent!

Merci!

Je me sens pousser une langue fourchue et un corps glissant! Ca va pythonner!

Peace,
Répondre à keloss

Résultats pour [Python] manipuler un string

[python]manipulation fichier csv (Résolu) Bonjour, Je possède plusieur fichier csv à reler. Je voulais utiliser le module csv, mais le problème, c'est que c'est pas facile de comparer de comparer plusieurs lignes. Mes données ne sont que des float (par contre j'ai 3 ligne... www.commentcamarche.net/forum/affich-8128302-python-manipulation-fichier-csv
[manipulation textes] perl vs python vs shell (Résolu) Bonjour, Dans le cadre de mon travail, j'ai régulièrement à analyser des fichiers textes très complexes, pas forcément formatés très précisément, de plusieurs millier de lignes. Dans ce contexte j'utilise pour l'instant pas mal de... www.commentcamarche.net/forum/affich-4376707-manipulation-textes-perl-vs-python-vs-shell
[Python]Convertir chaine de caractere (Résolu) Bonjour à tous J'ai créé une liste qui récupère des données provenant d'un fichier texte. Les données sont des nombres mais lorsque je les copie dans ma liste, Python les prend pour des chaînes de caractères. Donc je ne peux pas les afficher... www.commentcamarche.net/forum/affich-2169213-python-convertir-chaine-de-caractere

Résultats pour [Python] manipuler un string

Le langage Python est faiblement typéMythe Le langage de programmation Python est faiblement typé, comme le php ou le Basic. Réalité FAUX. Explications Le Python est un langage à typage fort dynamique. Démonstration: >>> a="toto" >>> b=5 >>> print a+b Traceback (most recent... www.commentcamarche.net/faq/sujet-10123-le-langage-python-est-faiblement-type
Enregistrer une vidéo en streaming (Youtube, Dailymotion...)De plus en plus de sites diffusent du contenu vidéo en streaming, c'est-à-dire en diffusion à la demande. Ainsi, il est nécessaire d'être connecté pour pouvoir en lire le contenu, voire de se connecter à partir de la page diffusant le contenu... www.commentcamarche.net/faq/sujet-12060-enregistrer-une-video-en-streaming-youtube-dailymotion
Capturer une vidéo en streamingNOTE AUX CONTRIBUTEURS : voir http://www.commentcamarche.net/faq/sujet 12060 enregistrer une video en streaming youtube google video etc De plus en plus de sites diffusent du contenu vidéo en streaming, c'est-à-dire en diffusion à la demande.... www.commentcamarche.net/faq/sujet-5247-capturer-une-video-en-streaming

Résultats pour [Python] manipuler un string

Conversion string $t en int avec script (Résolu)Bonjour, je suis nouveau avec les scripts. j'ai pas mal cherché sur google mais j'ai pas trouver comment convertir un string $t en int dans un script. Comme je suis debutant, j'utilise le language standard. Merci à tous si vous avez une... www.commentcamarche.net/forum/affich-2095139-conversion-string-t-en-int-avec-script
[java] manipulation de string (Résolu)Bnjour, voila je rélise actuellement un programe en java. Je dois creer des logins et mot de passe. J'aimerai pour creer mon login utiliser la première lettre du prenom suivi du nom ex: pierre durant -> login:pdurant Je ne sais pas si en java il... www.commentcamarche.net/forum/affich-2505995-java-manipulation-de-string
Concaténation (Résolu)Bonjour à tous, je voudrais savoir si il exite un équivalent de la fonction strcat() en java, qui permettrait de rajouter une chaîne de caractère à la fin d'une autre. Je sais qu'on peut le faire en utilisant +, mais cela ne m'intéresse... www.commentcamarche.net/forum/affich-2180517-concatenation

Résultats pour [Python] manipuler un string

Télécharger MPEG StreamclipMPEG Streamclip est un puissant convertisseur, lecteur et éditeur de vidéos. Il permet la lecture de fichiers vidéos, non pas uniquement les MPEGs. Il peut aussi convertir les fichiers MPEGs entre les formats "muxed/demuxed". En plus de la conversion... www.commentcamarche.net/telecharger/telecharger-34056330-mpeg-streamclip
Télécharger StreamripperDe nombreux fichiers audio circulent sur Internet en streaming surtout via les radios internet. Alors pour en profiter au maximum enregistrez cette musique diffusée en continu. Streamripper permet l'enregistrement des flux audio diffusés sur... www.commentcamarche.net/telecharger/telecharger-34055879-streamripper

Résultats pour [Python] manipuler un string

Stronghold: Crusader ExtremeDescription:Stronghold Crusader Extreme’s gameplay is a seamless combination of city building and real-time strategy. You are put in the armor of a fearless warlord during the Crusades and as sovereign of your own people,your goal is to “Lead,... www.commentcamarche.net/guide-achat/stronghold-crusader-extreme-1131919-fiche-technique
SOCOM: U.S. Navy SEALs Tactical StrikeU . . S .S .S,Other Names:SOCOM: Tactical Strike,Genre :Action,Nb. de joueurs hors-ligne:1-4,Jeu en ligne,Avis ESRB:Teen 13+,Développeur:Slant Six Games,Divers:Online Play via Infrastructure Mode,Memory Stick Duo/PRO Duo,Voice Support www.commentcamarche.net/guide-achat/socom-u-s-navy-seals-tactical-strike-964458-fiche-technique

Résultats pour [Python] manipuler un string

Les chaînes de caractères en C++Qu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une... www.commentcamarche.net/contents/cpp/cppstring.php3
Javascript - L'objet StringLes particularités de l'objet String string est un mot anglais qui signifie "chaîne", il s'agit en fait de chaîne de caractères. L'objet String est un objet qui contient un certain nombre de propriétés et de méthodes permettant la manipulation... www.commentcamarche.net/contents/javascript/jsstring.php3
Le langage SQLQu'appelle-t-on SQL? SQL (Structured Query Language, traduisez Langage de requêtes structuré) est un langage de définition de données (LDD, ou en anglais DDL Data Definition Language), un langage de manipulation de données (LMD, ou en anglais DML,... www.commentcamarche.net/contents/sql/sqlintro.php3