2016-10-27 3 views
1

Ich versuche, eine Textdatei zu importieren und den Text in eine Liste der Zeichenfolgen für jedes Wort zurückgeben, während Kleinbuchstaben und keine Interpunktion zurückgeben.Rufen Sie mehrere Funktionen im Listenverständnis

Ich habe den folgenden Code erstellt, aber dies teilt nicht jedes Wort in eine Zeichenfolge. Ist es auch möglich, .lower() in das Verständnis hinzuzufügen?

def read_words(words_file): 
    """Turns file into a list of strings, lower case, and no punctuation""" 
    return [word for line in open(words_file, 'r') for word in line.split(string.punctuation)] 
+0

Bitte fügen Sie Beispiel-Eingang, was Sie als Ausgabe erhalten möchten, und die tatsächliche Ausgabe Sie bekommen. – CAB

+1

Warum muss der Prozess ein Listenverständnis sein? – wwii

+0

Dies muss kein Verständnis sein. Nur gedacht, es wäre die kleinste Menge an Code – John

Antwort

0

Ja, können Sie .lower zum Verständnis hinzuzufügen. Es sollte wahrscheinlich in word passieren. Auch der folgende Code teilt wahrscheinlich nicht jedes Wort wegen string.punctuation. Wenn Sie nur versuchen, auf Whitespaces aufzuteilen, genügt das Aufrufen von .split() ohne Argumente.

0

Hier ist eine Liste Verständnis, das alles tun sollten Sie wollen:

[word.translate(None, string.punctuation).lower() for line in open(words_file) for word in line.split()] 

Sie müssen sich auf Leerzeichen (Standard) teilen, die Wörter zu trennen. Dann können Sie jede resultierende Zeichenfolge transformieren, um die Interpunktion zu entfernen und sie in Kleinbuchstaben umzuwandeln.

0

Verwenden Sie eine mapping to translate the words und verwenden Sie sie in einer Generatorfunktion.

import string 
def words(filepath): 
    '''Yield words from filepath with punctuation and whitespace removed.''' 

    # map uppercase to lowercase and punctuation/whitespace to an empty string 
    t = str.maketrans(string.ascii_uppercase, 
         string.ascii_lowercase, 
         string.punctuation + string.whitespace) 

    with open(filepath) as f: 
     for line in f: 
      for word in line.strip().split(): 
       word = word.translate(t) 
       # don't yield empty strings 
       if word: 
        yield word 

Nutzungs

for word in words('foo.txt'): 
    print(word) 
0
import string 
def read_words(words_file): 
    """Turns file into a list of strings, lower case, and no punctuation""" 
    with open(words_file, 'r') as f: 
     lowered_text = f.read().lower() 
    return ["".join(char for char in word if char not in string.punctuation) for word in lowered_text.split()] 
Verwandte Themen