2017-05-13 3 views
1

Je veux être en mesure de dépouiller le caractère \ n (.rstrip ('\ n')) d'un fichier texte (dictionnaire .txt) qui contient plus de 120 000 mots. puis compte chaque ligne et renvoie la quantité de mots dans le fichier txt (chaque mot est sur sa propre ligne). puis enfin, tous les mots à stocker dans une liste.Python - Utilisation de .readlines() avec .rstrip() et ensuite stocker tous les mots dans une liste

Pour l'instant, le code ci-dessous renvoie le nombre de lignes mais ne supprime pas le caractère \ n pour qu'il puisse être stocké dans la liste.

def lines_count(): 
     with open('dictionary.txt') as file: 
      print (len(file.readlines())) 
+0

double possible de [? Comment puis-je lire une ligne par ligne fichier dans une liste] (http://stackoverflow.com/questions/3277503/how-do- je-lis-une-file-file-by-line-into-al ist) – Aprillion

+0

Vous pouvez utiliser 'str.splitlines()', qui dans ce cas vous pouvez lire le fichier sous forme de chaîne en utilisant 'file.read()', puis utiliser 'splitlines()' sur toute la chaîne. – Kasramvd

+0

Voir [stackoverflow.com/questions/13259288/returning-a-list-of-words-after-reading-a-file-in-python](http://stackoverflow.com/questions/13259288/returning-a- liste-de-mots-après-lecture-un-fichier-en-python) – Ahmad

Répondre

1

Si vous voulez la liste des lignes sans le caractère de nouvelle ligne de fuite, vous pouvez utiliser la méthode str.splitlines(), qui, dans ce cas, vous pouvez lire le fichier sous forme de chaîne à l'aide file_obj.read() puis utilisez splitlines() sur toute la chaîne. Bien, il n'y a pas besoin d'une telle chose quand la fonction open est déjà retournée un générateur de vos lignes (vous pouvez simplement dépouiller la nouvelle ligne de fin pendant le traitement des lignes) ou appelez le str.strip() avec un map pour créer un itérateur de rayé lignes:

with open('dictionary.txt'): 
    striped_lines = map(str.strip, f) 

Mais si vous voulez juste compter les mots comme un moyen pythonique vous pouvez utiliser une expression du générateur au sein sum fonction comme suit:

with open('dictionary.txt') as f: 
    word_count = sum(len(line.split()) for line in f) 

Notez qu'il n'y a pas besoin de dépouiller les nouvelles lignes pendant que vous divisez la ligne.

par exemple.

In [14]: 'sd f\n'.split() 
Out[14]: ['sd', 'f'] 

Mais si vous voulez encore tous les mots dans une liste que vous pouvez utiliser une compréhension de liste au lieu d'une expression du générateur:

with open('dictionary.txt') as f: 
    all_words = [word for line in f for word in line.split()] 
    word_count = len(all_words) 
+0

Comment puis-je accéder à cette liste "all_words" en dehors de la fonction? – MLJezus

+0

@Tyson Il suffit de le retourner dans la fonction et après avoir appelé la fonction, affectez le résultat à une nouvelle variable. Je vous recommande à peine de lire quelques tutoriels de base avant de poser des questions. – Kasramvd

0

si vous voulez retourner une liste de lignes sans \n puis imprimer la longueur de cette liste:

def line_list(fname): 
    with open(fname) as file: 
     return file.read().splitlines() 

word_list = line_list('dictionary.txt') # 1 word per line 
print(len(word_list))