2016-07-04 2 views
-3

Je suis un débutant en langage Python et j'ai besoin de votre aide .Trouver des noms dans un fichier texte (Texte A) en utilisant une liste dans un autre fichier texte (Texte B) et attribuer des valeurs à côté des noms en Texte A (Python)

J'ai 2 fichiers texte différents. Let's ils sont Text_A.txt et Text_B.txt.

Text_A.txt contient une liste des noms comme suit (ils sont onglet délimités):

Sequence_1 Sequence_2 Sequence_3 Sequence_4 Sequence_5 Sequence_6 Sequence_7 Sequence_8

et Text_B.txt contient une liste de noms comme suit (les noms de séquence sont écrits dans chaque ligne):

Sequence_1 Sequence_2 Sequence_3 Sequence_4 Sequence_5 Sequence_6 Sequence_7 Sequence_8 Sequence_9 Sequence_10 Sequence_11

Ce que je voudrais faire est assigner « 1 » à côté des noms de séquence dans Text_B.txt si les noms sont en Text_A.txt. Et affectez "0" à côté des noms de séquence dans Text_B.txt si les noms ne sont pas dans Text_A.txt.

donc ... la sortie attendue en utilisant l'exemple ci-dessus est quelque chose comme ci-dessous (les noms et les valeurs correspondantes doivent être écrites dans chaque ligne):

Sequence_1; 1
Sequence_2, 1 Sequence_3; 1 Sequence_4; 1 Sequence_5; 1 Sequence_6; 1 Sequence_7; 1 Sequence_8; 1 Sequence_9; 0 Sequence_10; 0 Sequence_11; 0

Je voudrais la sortie au format .txt.

Comment dois-je faire cela en utilisant Python?

Votre aide est vraiment nécessaire ici car j'ai plus de 3000 et 6000 noms dans les fichiers Text_A.txt et Text_B.txt respectivement.

Merci beaucoup!

+0

Veuillez également indiquer la partie du code que vous avez essayé de résoudre. Cela donnerait aux autres un moyen de trouver quelle est l'erreur dans votre code qui ne fonctionne pas! – Deca

+0

Salut Deca, merci pour votre message ... Je suis vraiment un débutant donc je ne sais pas par où commencer .... –

+0

6000 n'est pas un grand nombre, je veux dire pas assez grand pour créer des difficultés que le code de base et le matériel de base ne peut pas gérer. – polku

Répondre

0

Vous peut effectuer les opérations suivantes

# read each file assuming that your sequence of strings 
# is the first line respectively 
with open('Text_A.txt', 'r') as f: 
    seqA = f.readline() 
with open('Text_B.txt', 'r') as f: 
    seqB = f.readline() 

# remove end-of-line character 
seqA = seqA.strip('\n') 
seqB = seqB.strip('\n') 

# so far, seqA and seqB are strings. split them now on tabs 
seqA = seqA.split('\t') 
seqB = seqB.split('\t') 

# now, seqA and seqB are list of strings 
# since you want to use seqA as a lookup, you should make a set out of seqA 
seqA = set(seqA) 

# now iterate over each item in seqB and check if it is present in seqA 
# store result in a list 
out = [] 
for item in seqB: 
    is_present = 1 if item in seqA else 0 
    out.append('{item}:{is_presnet}\n'.format(item=item,is_present=is_present)) 

# write result to file 
with open('output.txt','w') as f: 
    f.write('\t'.join(out)) 

Si vos séquences contiennent plusieurs entrées de millions, vous devriez penser à une approche plus avancée.

+0

Merci beaucoup pour l'explication détaillée. Je vais y aller attentivement et apprendre. –

+0

N'oubliez pas de marquer les réponses qui vous sont utiles et d'accepter la réponse qui vous a le plus aidé. – desiato