2016-09-15 3 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 

образец требуемого выходного

Отдельные слова:

Абате

Chicanery

распространяют

опровергать

латентный

аберрантное

Коагулят

растворение

болтливый

+0

вы можете предоставить образец ' words.txt'. Он не должен быть полным, чтобы получить представление о формате. Я имею в виду, например, это одно слово в строке или разделение слов и т. Д.? –

+0

Я отредактировал свое оригинальное сообщение. Надеюсь, это будет более полезно. – CV88

+0

Да, сэр, есть. – CV88

ответ

1

Учитывая, что вам нужны только первые 10 слов. Нет 4-х строк. Вы можете спокойно читать только 1-й и сэкономить некоторое время.

#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

Хорошо, это приближается. Однако, я думаю, что я ошибся в том, что я спросил. Я создал список, называемый lengths, и я взял первые десять слов из текстового файла, поместил их в длину списка [] и напечатал, что и выводит выше. Значения из длин списка [] - это то, что я пытаюсь вывести, я думаю. – CV88

+0

Я ценю всю вашу помощь paul. Спасибо – 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, как предложил Пол Руни, вы также можете адаптировать свой код. Когда вы создаете длину списка [], вы создаете список со всеми длинами слов, содержащихся в wordList.

Затем вы зацикливаете первые 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 

Я надеюсь, что это ясно, и это ответ, который вы искали

Смежные вопросы