2016-09-15 40 views
-1

如何从单独的文本文件打印单词列表?我想打印所有的单词,除非单词长度为4个字符。从单独的文本文件列表中打印值

words.txt文件看起来像这样:

减弱强辩为散发的反驳潜在异常凝结溶解饶舌赞美

它拥有334个总字在里面。我试图显示列表,直到它到达长度为4的单词并停止。

wordsFile = open("words.txt", 'r') 
words = wordsFile.read() 
wordsFile.close() 
wordList = words.split() 

#List outputs length of words in list 

lengths= [len(i) for i in wordList] 
for i in range(10): 
    if i >= len(lengths): 
     break 
    print(lengths[i], end = ' ') 

# While loop displays names based on length of words in list 

while words != 4: 
    if words in wordList: 
     print("\nSelected words are:", words) 
    break 

输出
5 9 11 7 6 8 9 11 9 4 

样品所需的输出

所选词是:

阿巴特

强辩

为散发

的反驳

异常

凝结

溶解

贫嘴

+0

你可以提供一个样本' words.txt'文件。它不一定是完整的,只是为了了解格式。我的意思是说,例如每行一个单词还是空格单词等? –

+0

我编辑了我原来的帖子。我希望它更有帮助。 – CV88

+0

是的,先生,有。 – CV88

回答

1

鉴于您只需要前10个单词。阅读全部4行并没有太多的意义。您可以安全地阅读第一张照片并节省一些时间。

#from itertools import chain 

with open('words.txt') as f: 

    # could raise `StopIteration` if file is empty 
    words = next(f).strip().split() 

    # to read all lines 
    #words = [] 
    #for line in f: 
    # words.extend(line.strip().split()) 

    # more functional way 
    # words = list(chain.from_iterable(line.strip().split() for line in f)) 

print("Selected words are:") 
for word in words[:10]: 
    if len(word) != 4: 
     print(word) 

我还有一些替代方法留在那里但是被注释掉了。

使用while循环进行编辑。

i = 0 
while i < 10: 
    if len(words[i]) != 4: 
     print(words[i]) 
    i += 1 

既然你知道你可以多次重复做,你可以使用for循环隐藏了迭代的机制。一段时间不会很好地促进这一点,并且当你不知道你会做多少次迭代时会更好地使用它。

+0

好的,这个越来越近了。但是,我认为我所问的是错的。我创建了一个名为长度的列表,我从文本文件中取出前十个单词,将它们放入列表长度[]中,并打印出输出如上所示的内容。来自列表长度[]的值就是我想要输出的内容。 – CV88

+0

我感谢你的所有帮助保罗。谢谢 – CV88

+0

是的,但不是全部一行。你看到我上面想要的输出了吗?我试图去解决这个问题。 – CV88

1

来读取一个文本文件中的所有单词,并打印出每个人,除非他们长度为4:

with open("words.txt","r") as wordsFile: 
    words = wordsFile.read() 
    wordsList = words.split() 
    print ("Selected words are:") 
    for word in wordsList: 
    if len(word) != 4:  # ..unless it has a length of 4 
     print (word) 

后来在你的问题中,你写了“我试图显示前10个单词”......)。如果是,请添加一个计数器,并添加一个条件以打印,如果其值为< = 10。

+0

谢谢你的建议。 – CV88

1

虽然我会使用for或while循环,就像Paul Rooney所建议的那样,您也可以调整代码。 当您创建列表长度[]时,您将创建一个包含wordList中所有单词的所有长度的列表。

然后,您使用for循环在长度[]中循环前10个长度; 如果您需要使用这种方法,你可以嵌套一个for循环,比较词和长度:

#lengths[] contains all the lengths of the words in wordList 
lengths= [len(i) for i in wordList] 
#foo[] cointains all the words in wordList 
foo = [i for i in wordList] 

#for the first 10 elements of lengths, if the elements isn't 4 char long 
#print foo[] element with same index 
for i in range(10): 
    if lengths[i] != 4: 
     print(foo[i]) 
    if i >= len(lengths): 
     break 

我希望这是明确的,这就是你要找的答案