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 :

remplacer plusieurs caractères dans un texte à une position donnée


Sujet :

Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 142
    Points : 57
    Points
    57
    Par défaut remplacer plusieurs caractères dans un texte à une position donnée
    Bonjour,

    Je souhaite remplacer les bases A et G situé dans une position précise par T dans une séquence donnée
    Je souhaite remplacer les A et G par T pour les positions entre 11-20; 34-57 et 105-116

    fichier de la séquence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    >seq
    CGCCTGACTGGAGGCGGATCCAGCCGGCCAGCTGCCTCTCTGGAGCCCAGCTCTTGGGCCCCCTGCACTCACCTGCTCTTCCTGGGCTGGCTGTCTCCTGCTCATCCAGCCATGCGGT
    fichier position
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    11   20
    34   57
    105   116
    Ainsi obtenir au final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CGCCTGACTGNNNNNNNNNNCAGCCGGCCAGCTNNNNNNNNNNNNNNNNNNNNNNNNGCCCCCTGCACTCACCTGCTCTTCCTGGGCTGGCTGTCTCCTGCTCANNNNNNNNNNNN
    Ce que j'ai fait :
    J'extrais les sous-séqueces correspondant aux différentes positions puis je remplace A et G par T dans ses sous séquences. Mais, je coince car je n'ai pas la séquence finale

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for line in open(file_position):	
            line = line.replace('\n', '')	
    	element = line.split("\t")
    	start_results=int(element[1])	
     
            seq = ''.join(name2seq.values()) # séquence
     
            sous_seq = seq[start_results-1:stop_results:1]  # extraction de la sous-séquence
            mask = {'A':'T','G':'T'}
            print (''.join([ e.replace(e, mask[e]) for e in sous_seq])
    Je pense que ce n'est pas la bonne méthode mais comment remplacer plusieurs caractère dans un texte à une position donnée?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    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 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Salut,

    Citation Envoyé par pontarose Voir le message
    Je pense que ce n'est pas la bonne méthode mais comment remplacer plusieurs caractère dans un texte à une position donnée?
    Les string sont immutables: remplacer <=> créer une nouvelle string.
    Vous pouvez essayer 2 solutions:
    • Découper la chaîne initiale en (liste de) segments 0-10, 11-20, 21-33, 34-57,... remplacer les caractères dans les segments qui vous intéressent, construire la chaine de caractère finale.
    • Transformer la chaine de caractère en liste de caractère, parcourir la liste avec un
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      for x, ch in enumerate(liste):
         ...
      lorsque le x est dans les intervalles définis, remplacer le caractère si nécessaire.
      à la sortie, reconstruire la chaîne de caractères à partir de la liste.


    Bon courage,

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

  3. #3
    Membre averti Avatar de cervo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 220
    Points : 388
    Points
    388
    Par défaut

    Ce que j'aurais fait à ta place ce serait de créer une fonction identique à replace() mais cette fois en ajoutant 2 paramètres en plus, un pour la position du caractère à changer et le second pour le caractère à utiliser ensuite je retourne un nouvelle chaîne. Tu pourras parcourir ton fichier position et recupérer ta chaine changée comme tu veux.
    Toute chose dépend de la valeur qu'on lui attribue !

  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,

    Où est le problème ? Les string peuvent être découpées par slicing.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    >>> seq = 'CGCCTGACTGNNNNNNNNNNCAGCCGGCCAGCTNNNNNNNNNNNNNNNNNNNNNNNNGCCCCCTGCACTCACCTGCTCTTCCTGGGCTGGCTGTCTCCTGCTCANNNNNNNNNNNN'
    >>> def replace_(string, start, end, orig, subs):
    ...     part = string[start:end].replace(orig, subs)
    ...     return ''.join([string[:start], part, string[end:]])
    ...
    >>> seq = replace_(seq, 20, 32, 'A', 'T')
    >>> seq = replace_(seq, 20, 32, 'G', 'T')
    >>> seq
    'CGCCTGACTGNNNNNNNNNNCTTCCTTCCTTCTNNNNNNNNNNNNNNNNNNNNNNNNGCCCCCTGCACTCACCTGCTCTTCCTGGGCTGGCTGTCTCCTGCTCANNNNNNNNNNNN'

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 4
    Points : 6
    Points
    6
    Par défaut Transformons en list
    Salut,

    Ce qu'il est possible de faire aussi c'est de transformer ta chaîne en liste. Effectuer tes modifications. Puis retransformer en string.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> seq='CGCCTGACTGNNNNNNNNNNCAGCCGGCCAGCTNNNNNNNNNNNNNNNNNNNNNNNNGCCCCCTGCACTCACCTGCTCTTCCTGGGCTGGCTGTCTCCTGCTCANNNNNNNNNNNN'
    >>> seqList=list(seq)
    >>> position=21
    >>> [seqList[x].replace(seqList[x],'T') for x in range(0,21) if seqList[x]=='G'or seqList[x]=='A']
    >>> seqUpdate=''.join(str(e) for e in seqList)
    >>> seqUpdate
    'CGCCTGACTGNNNNNNNNNNCTGCCGGCCAGCTNNNNNNNNNNNNNNNNNNNNNNNNGCCCCCTGCACTCACCTGCTCTTCCTGGGCTGGCTGTCTCCTGCTCANNNNNNNNNNNN'
    Attention à la position dans la liste
    remplacer range par tes plages.

    Edit: En fait ca ne marche pas. je reviendrai dessus.

    Edit bis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> def replace_char(liste,orig,term,fValue=('A','G'),tValue='T'):
    	for i in range(orig,term):
    		if liste[i] in fValue:
    			liste[i]=tValue
     
    >>> seq
    'CGCCTGACTGNNNNNNNNNNCAGCCGGCCAGCTNNNNNNNNNNNNNNNNNNNNNNNNGCCCCCTGCACTCACCTGCTCTTCCTGGGCTGGCTGTCTCCTGCTCANNNNNNNNNNNN'
    >>> seqList=list(seq)
    >>> replace_char(seqList,0,21)
    >>> seqUpdate=''.join(str(e) for e in seqList)
    >>> seqUpdate
    'CTCCTTTCTTNNNNNNNNNNCAGCCGGCCAGCTNNNNNNNNNNNNNNNNNNNNNNNNGCCCCCTGCACTCACCTGCTCTTCCTGGGCTGGCTGTCTCCTGCTCANNNNNNNNNNNN'

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/10/2010, 15h02
  2. Remplacer un ou plusieurs caractères dans des zones de texte
    Par php_.net dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/04/2010, 23h03
  3. Réponses: 3
    Dernier message: 13/03/2007, 13h40
  4. Comment remplacer plusieurs caractères dans une chaîne?
    Par Antigonos Ier Gonatas dans le forum Général Python
    Réponses: 5
    Dernier message: 16/06/2006, 16h04
  5. Inserer du texte à une position donnée dans un Memo
    Par bassim dans le forum Composants VCL
    Réponses: 2
    Dernier message: 23/11/2005, 17h45

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