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

我希望這是明確的,這就是你要找的答案