2017-05-13 9 views
1

我希望能够从文本文件中剥离\ n字符(.rstrip(“\ n”))(词典.txt)包含120,000多个单词。然后对每行进行计数并返回txt文件中的单词数量(每个单词都在自己的行上)。 然后最后想要将所有单词存储到列表中。Python的 - 使用.readlines()与.rstrip(),然后所有的字存储到一个列表

此刻,下面的代码返回线的量,但不剥离\ n字符,因此它可以被存储到列表中。

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

可能重复的[如何逐行读取文件到列表中?](http://stackoverflow.com/questions/3277503/how-do- I-读一个文件行由行 - 进入 - 人ist) – Aprillion

+0

您可能想要使用'str.splitlines()',在这种情况下,您可以使用'file.read()'作为字符串读取文件,然后在整个字符串中使用'splitlines()'。 – Kasramvd

+0

请参阅[stackoverflow.com/questions/13259288/returning-a-list-of-words-after-reading-a-file-in-python](http://stackoverflow.com/questions/13259288/returning-a-在python中读取文件后的单词列表) – Ahmad

回答

1

如果你想行没有尾随换行字符,你可以使用str.splitlines()方法,在这种情况下,你可以阅读文件作为file_obj.read()然后使用splitlines()在整个串串名单。虽然,没有必要对这样的事情时,open函数已经返回了您的线路发电机(你可以简单地去掉尾随新线,而加工线)或只需调用str.strip()map创造条纹的迭代器行:

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

但如果你只是想算的话,你可以使用sum函数内的发电机表达类似以下内容的Python的方式:

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

注意,没有必要剥去新行,当你分裂线。

例如

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

但是,如果你仍然希望所有在列表中,你可以用它代替生成器表达式列表理解的话:

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

我该如何去访问该函数之外的“all_words”列表? – MLJezus

+0

@Tyson只需在函数内部返回它,并在调用该函数后将结果赋给一个新变量。在提问之前,我几乎不建议你阅读一些基本的教程。 – Kasramvd

0

,如果你想返回行的列表没有\n然后打印此列表的长度:

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)) 
相关问题