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 chaines de caractères dans un fichier


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 47
    Par défaut remplacer chaines de caractères dans un fichier
    Bonjour,

    Je chercher à remplacer des chaines de caractères en fonction de plusieurs conditions, voilà mon code:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    pos=[]
    ref=[]
    alt=[]	
    test=[16842,'G','C'],[16844,'T','G'],[16839,'C','T'],[16830,'T','ACCCC'],[16820,'T','GCC']
    test2=[]
    for x in test:
    	pos.append(x[0])
    	ref.append(x[1])
    	alt.append(x[2])
     
    fasta=open('rCRS.txt','r')
    seq=""
    name=""
    tmp=fasta.readlines()
    fasta.close()
    name=tmp[0][1:-1]
    count=0
    newfa=[">",name,"\n"]
    for x in tmp[1:] :
    	for y in x:
    		count+=1
    		if count in pos:
    			if y == 'G' and 'C' in alt:
    				newfa.append('W')
    			elif y == 'T' and 'G' in alt:
    				newfa.append('Z')
    			elif y == 'C' and  'T' in alt:
    				newfa.append('Y')
     
    		else:
    			newfa.append(y)
    print ''.join(newfa)
    voilà le résulat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CTGGTTCCTACTTCAGGGTCATAAAGCCTAAATAGCCCACACGTZCCCCTTAAAZAAGAC
    ATYACWAZG
    Le problème est que la lettre Z (ma seconde condition) apparaît à trois reprises alors qu'elle devrait être présente seulement une seule fois....
    De même si j'ai par exemple ce motif 'ACCCC' je dois le remplacer à la position 16830 si on a bien un T dans notre fichier input..

    Si quelqu’un à une idée?
    encore merci pour votre aide.
    Piotreee
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Dans les boucles for, votre variable 'alt' est la même indépendamment de la valeur de x et de y. Je doute que ce soit cela qu'on veuille.

    A quoi serve les variables test ? Vous les définissez et ne vous en servez pas... Ce n'est pas là dedans que vous définissez l'ensemble des choses que vous voulez remplacer ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 47
    Par défaut
    Merci. Oui peut être que boucler sur ma variable test et tester les égalités serait mieux...
    La variable test est en réalité un fichier csv. Le fichier attaché est un fichier fasta (sequence ADN) organisé de la sorte:
    >nom de le sequence
    ACCCGTTTTA
    TTTC..............

    Mon fichier de sortie est le même que le fichier d entré avec les modifs en plus.
    Merci beaucoup.

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

    Citation Envoyé par Piotree Voir le message
    Merci. Oui peut être que boucler sur ma variable test et tester les égalités serait mieux...
    Un bon début serait de décrire plus précisément (en français) ce que vous cherchez à faire...

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

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 47
    Par défaut
    Bonjour,
    Je suis vraiment désolé pour toutes ces confusions.

    En fait, j'ai deux fichiers dont l'un est une séquence ADN fasta (il est en pièce jointe.) et le second, ici correspond à la variable test:

    Dans la variable test ici 16842 correspond à la position dans mon fichier fasta, le G est la lettre qui se trouve à cette position. Je sais également qu'à cette même position il est possible d'avoir un C. Pour cette position je veux alors changer le G en W qui correspond à la combinaison G,C (désolé, cela peut paraître un peu étrange..)

    De même dans la variable test, on peut avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test=[16830,'T','ACCCC']
    . Cela signifie qu'à la position 16830 de notre fichier fasta on doit avoir un T que l'on remplace par ACCCC.

    J'essaie de changer en premier cela: en W
    puis cela;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test=[16830,'T','ACCCC']
    parce que si je remplace en premier le T par ACCCC à la position 16842 nous n'aurons plus la lettre G vu que precedemment on aura remplace une lettre par 5 autres.

    J'espère être plus claire et je suis vraiment désolé pour l'incohérence de mon premier post.
    Merci pour votre aide

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Citation Envoyé par Piotree Voir le message
    si je remplace en premier le T par ACCCC à la position 16842 nous n'aurons plus la lettre G vu que precedemment on aura remplace une lettre par 5 autres.
    C'est un problème classique. Pour le résoudre, remplace les éléments par ordre décroissant, en commençant par le dernier.

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

    Citation Envoyé par Piotree Voir le message
    De même dans la variable test, on peut avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test=[16830,'T','ACCCC']
    . Cela signifie qu'à la position 16830 de notre fichier fasta on doit avoir un T que l'on remplace par ACCCC.
    Si j'ai un 'T' à la position 16830, on le remplace par 'ACCCC', çà je comprends.
    Par contre:

    Citation Envoyé par Piotree Voir le message
    Dans la variable test ici 16842 correspond à la position dans mon fichier fasta, le G est la lettre qui se trouve à cette position. Je sais également qu'à cette même position il est possible d'avoir un C. Pour cette position je veux alors changer le G en W qui correspond à la combinaison G,C (désolé, cela peut paraître un peu étrange..)
    Là déjà çà devient confus car le deuxième élément de test n'a pas le même sens que précédemment et d'où sort le 'W', mystère!

    Citation Envoyé par Piotree Voir le message
    J'essaie de changer en premier cela: en W puis cela;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test=[16830,'T','ACCCC']
    parce que si je remplace en premier le T par ACCCC à la position 16842 nous n'aurons plus la lettre G vu que precedemment on aura remplace une lettre par 5 autres.
    Par quelle magie vous allez d'abord remplacer à la position 16842 puis à la position 16830? Si vous construisez une nouvelle chaîne de caractères à partir de... il va falloir y aller séquentiellement: 16830 sera passé lorsqu'on va arriver en 16842 et vous n'aurez rien remplacé dans la chaîne initiale, juste créé les 16xxx premiers caractères de la nouvelle chaîne/liste que vous appelez newfa.

    Si vous voulez coder, il va falloir être plus précis.

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

Discussions similaires

  1. [Débutant] Remplacer chaine de caractères dans un fichier
    Par bezourox dans le forum VB.NET
    Réponses: 3
    Dernier message: 08/04/2014, 08h02
  2. Remplacement de chaine de caractères dans un fichier
    Par koKoTis dans le forum Langage
    Réponses: 4
    Dernier message: 13/09/2008, 18h36
  3. Remplacer une chaine de caractère dans un fichier texte.
    Par Empty_body dans le forum VBA Access
    Réponses: 1
    Dernier message: 19/01/2008, 11h16
  4. Réponses: 14
    Dernier message: 15/06/2007, 13h59
  5. Réponses: 4
    Dernier message: 18/07/2006, 16h31

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