2017-10-20 26 views
0

Salut, je veux enlever la nouvelle ligne de ma liste et obtenir le troisième mot pour chaque élément. J'utilise split et rstrip. Ceci est mon code:Python rstrip et split

# obtain just compound ids from list 
just_compound_id = [] 
for line in final_list: 
    split_file = line.split(' ') 
    split_file = line.rstrip() 
    just_compound_id.append(split_file[2]) 
    print(just_compound_id) 

mais je reçois une sortie vraiment bizarre, quelque chose comme ça

['I'] 
['I', 'I'] 
['I', 'I', 'I'] 
['I', 'I', 'I', 'I'] 
['I', 'I', 'I', 'I', 'I'] 

** EDIT

ceci est mon entrée

['UNIQUE-ID - ASN\n', 'UNIQUE-ID - D-GLT\n', 'UNIQUE-ID - 4-AMINO- 
BUTYRATE\n', 'UNIQUE-ID - CPD-8569\n', 'UNIQUE-ID - CPD-17095\n', 'UNIQUE-ID 
- CPD-17880\n', 'UNIQUE-ID - GLY\n', 'UNIQUE-ID - CPD-18298\n', 'UNIQUE-ID - 
D-SERINE\n', 'UNIQUE-ID - ACETYLCHOLINE\n', 'UNIQUE-ID - DOPAMINE\n', 
'UNIQUE-ID - SEROTONIN\n', 'UNIQUE-ID - HISTAMINE\n', 'UNIQUE-ID - 
PHENYLETHYLAMINE\n', 'UNIQUE-ID - TYRAMINE\n', 'UNIQUE-ID - CPD-58\n', 
'UNIQUE-ID - 1-4-HYDROXYPHENYL-2-METHYLAMINOETHAN\n', 'UNIQUE-ID - 
TRYPTAMINE\n'] 
+3

Veuillez donner un exemple de votre saisie. En outre, rstrip() avant de diviser. –

+1

Voulez-vous vraiment réécrire 'split_file'? :) –

+0

Donc, j'ai changé l'ordre (btw pourquoi strip doit être avant split?). Mais je n'ai toujours pas le \ n retiré de ma liste – StudentOIST

Répondre

1

Il devrait être split_file.split(' ') au lieu de line.split(' '), et aussi vous devez faire le line.rstrip() être avant la split_file.split(' '):

just_compound_id = [] 
for line in final_list: 
    split_file = line.rstrip() 
    split_file = split_file.split(' ') 
    just_compound_id.append(split_file[2]) 
    print(just_compound_id) 

La façon dont vous avez actuellement, la première affectation à split_file n'a pas d'effet puisque vous ne l'utilisez pas et vous écrasez dans la mission suivante.

-1

Votre sortie est erronée car le troisième caractère de chaque chaîne entrée est I.

Vous essayez d'obtenir le personnage au milieu, non?

Il faut donc utiliser ce code à la place

# obtain just compound ids from list 
just_compound_id = [] 
for line in final_list: 
    split_file = line.rstrip() 
    split_file = line.split(' ') 
    just_compound_id.append(split_file[len(split_file)/2]) # EDIT HERE 

print(just_compound_id) 
+0

En utilisant votre code, j'ai reçu les commentaires suivants sur les types d'opérandes non supportés pour /: 'str' et 'int'. Aussi, je ne veux pas obtenir le caractère du milieu, mais le dernier mot (par exemple pour le premier élément de la liste, je veux obtenir ASN) – StudentOIST

+0

@smvpfm Merci. J'ai fait un montage. –

0

Vous pouvez utiliser la compréhension de la liste:

[e.rstrip().split('-')[2] for e in finallist] 
+0

@smvpfm Est-ce ce que vous voulez? –

0

Un autre choix est regex si vous avez entrée plus compliquée. Pour le cas ci-dessus, je recommande de fractionner les lignes en utilisant - et de définir le paramètre maxsplit.

final_list = ['UNIQUE-ID - ASN\n', 'UNIQUE-ID - D-GLT\n', 'UNIQUE-ID - 4-AMINO-BUTYRATE\n', 'UNIQUE-ID - CPD-8569\n', 'UNIQUE-ID - CPD-17095\n', 'UNIQUE-ID - CPD-17880\n', 'UNIQUE-ID - GLY\n', 'UNIQUE-ID - CPD-18298\n', 'UNIQUE-ID - D-SERINE\n', 'UNIQUE-ID - ACETYLCHOLINE\n', 
       'UNIQUE-ID - DOPAMINE\n', 'UNIQUE-ID - SEROTONIN\n', 'UNIQUE-ID - HISTAMINE\n', 'UNIQUE-ID - PHENYLETHYLAMINE\n', 'UNIQUE-ID - TYRAMINE\n', 'UNIQUE-ID - CPD-58\n', 'UNIQUE-ID - 1-4-HYDROXYPHENYL-2-METHYLAMINOETHAN\n', 'UNIQUE-ID - TRYPTAMINE\n'] 
just_compound_id = [] 
for line in final_list: 
    line = line.rstrip() 
    split_id = line.split('-', 2)[2].strip() 
    just_compound_id.append(split_id) 
print(just_compound_id)