2012-11-06 18 views

cevap

13

words_list.append(...) değiştirin:

['hello there how is everything ', 'thank you all', 'again', 'thanks a lot'] 

Böyle görünmek listesini istiyorum: Bu kod çalıştırma

def read_words(test.txt): 
    open_file = open(words_file, 'r') 
    words_list =[] 
    contents = open_file.readlines() 
    for i in range(len(contents)): 
     words_list.append(contents[i].strip('\n')) 
    return words_list  
    open_file.close() 

bu listeyi üretir for döngüsünü aşağıdaki ile satır:

words_list.extend(contents[i].split()) 

Bu, her satırı boşluk karakterlerine böler ve sonuçta oluşan listenin her öğesini words_list'a ekler.

Ya

bir liste kavrama gibi tüm fonksiyonlarını yeniden yazma için alternatif bir yöntem olarak: function biraz kullanılarak kısaltılabilir

def read_words(words_file): 
    with open(words_file, 'r') as f: 
    ret = [] 
    for line in f: 
     ret += line.split() 
    return ret 

print read_words('test.txt') 

:

İşte
def read_words(words_file): 
    return [word for line in open(words_file, 'r') for word in line.split()] 
+0

teşekkür ederim F.J, bu –

5

Bunu yazmak şey mi itertools, ama ben şahsen daha az okunabilir sonucu bulmak:

import itertools 

def read_words(words_file): 
    with open(words_file, 'r') as f: 
    return list(itertools.chain.from_iterable(line.split() for line in f)) 

print read_words('test.txt') 

İkinci versiyonun en güzel yanı, tamamen jeneratör tabanlı olması ve böylece dosyanın tümünün bir an önce bellekte saklanmasını engellemesidir.

with open(file) as f: 
    words = f.read().split() 
17

dosyasının boyutuna bağlı olarak, bu gibi görünüyor. İşte birkaçı:

Eğer tekrarlanan kelimeler umurumda yoksa:

def getWords(filepath): 
    with open('filepath') as f: 
     return list(itertools.chain(line.split() for line in f)) 

her kelime sadece bir kez göründüğü kelimelerin bir listesini geri dönmek isterseniz:

Not: Bu kelimelerin sırasını korumaz

def getWords(filepath): 
    with open('filepath') as f: 
     return {word for word in line.split() for line in f} # python2.7 
     return set((word for word in line.split() for line in f)) # python 2.6 

İsterseniz bir dizi kelimelerin sırasını korumak istediğiniz --and--:

def getWords(filepath): 
    with open('filepath') as f: 
     return collections.Counter(itertools.chain(line.split() for line in file)) 

bu

yardım Umut: Bir kelime-frekans sözlüğü istiyorsanız

def getWords(filepath): 
    with open('filepath') as f: 
     words = [] 
     pos = {} 
     position = itertools.count() 
     for line in f: 
      for word in line.split(): 
       if word not in pos: 
        pos[word] = position.next() 
         words.append(word) 
    return sorted(words, key=pos.__getitem__) 

+1

+ 1 yararlı oldu çünkü bu, çünkü bu noktada ve noktada. –

3

Bunu yapmanın birkaç yolu vardır: o kadar kolay olacak gibi

İlgili konular