2017-06-19 1 views
0

Disons que j'ai un fichier (txt) avec:éléments globaux de la liste au premier soulignent

footest_footest 
footest_footest2 
footest_footest3 
footest_footest6 
bartest_bartest 
bartest_bartest2 
cartest_cartest 
cartest_cartest2 
cartest_cartest5 

En utilisant python, comment pourrais-je agréger les événements à la première underscore il imprime:

footest 
bartest 
cartest 

Merci à l'avance

+1

Je crois que cette tâche n'est pas complexe, et vous pouvez essayer vous-même tout d'abord, puis si quelque chose va mal, a mis les difficultés que vous avez rencontrées. –

Répondre

-1
s1 = 'footest_fall' 
s1_left = s1.partition('_')[0] 
print(s1_left) 
+1

La question portait sur * l'agrégation * des premières parties des mots, cela ne répond pas. –

0

Comment cela? En supposant que vous savez lire dans un fichier.

import itertools 

z = ['footest_footest', 
'footest_footest2', 
'footest_footest3', 
'footest_footest6', 
'bartest_bartest', 
'bartest_bartest2', 
'cartest_cartest', 
'cartest_cartest2', 
'cartest_cartest5'] 

for k, _ in itertools.groupby(z, key= lambda x: x.split('_',1)[0]): 
    print k 

footest 
bartest 
cartest 
0

J'ai appelé le fichier texte dans votre exemple foo. en utilisant collections.Counter est efficace et vous donne également le nombre d'occurrences.

from collections import Counter 
counter=Counter() 
with open('foo') as f: 
    for line in f: 
     counter[line.split('_')[0]]+=1 

counter contient des clés uniques et le nombre d'occurrences

Counter({'footest': 4, 'cartest': 3, 'bartest': 2}) 

counter.keys() retourne juste les clés

['bartest', 'footest', 'cartest'] 
0

Vous pouvez utiliser une compréhension de la liste pour recueillir les préfixes et les placer dans un ensemble pour ne citer que les uniques:

with open('file.txt') as f: 
    prefixes = set(line[0:line.find('_')] for line in f.readlines() 
             if line.find('_') != -1) 
    for p in prefixes: 
    print p 
0

Exemple de travail avec sortie comme demandé:

import collections 

counter = collections.Counter() 
with open("file.txt", "r") as file: 
    content = file.read().splitlines() 
    for line in content: 
     counter[line.split("_")[0]] += 1 

for item in counter.keys(): 
    print(item)