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 confirmé
    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
    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
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 722
    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 722
    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 expérimenté 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
    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.

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    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
    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