2011-11-25 117 views
2

我有幾千字的文本文件(一行中有一個字)。 我寫了一個函數,它帶有兩個單詞(字符串),並檢查一個單詞是否是另一個單詞(即,如果這兩個單詞包含相同的 字母,即使順序不同)。我如何在Python上打開文本文件中的行(2.72)

現在我想查閱我的巨大文本文件並搜索anagrams。我的輸出應該是一個包含幾個字的元組的列表,其中 是anagrams。

問題是,我不知道如何用for/while循環檢查單詞。我試過的所有東西都失敗了。 (我很清楚這樣做的方式,但我只是不太瞭解python)。

編輯#1: 假設我想在文本中的第1到第100行而不是整個文本,我該怎麼做?

+0

這功課嗎? – ekhumoro

回答

0

Python Tutorial有你覆蓋:

的另一種方法讀取線是遍歷文件 對象。這是內存高效,快速,並導致簡單的代碼:

for line in f: 
    print line, 

您可以使用itertools.combinations將文字的所有組合:

with open("file.txt") as word_list: 
    for (word1, word2) in itertools.combinations(word_list, 2): 
     if anagram(word1, word2): 
      # do stuff 
+0

我需要給我的函數兩個單詞(字符串)。這意味着我需要把它放在當前的單詞,在下一行的單詞,並在第三行之後,等.. 在這樣做之後,我需要給我的功能在第二行中的單詞與第三行的字,而不是在第四行的字等等... 我沒有成功做到這一點。有任何想法嗎 ? – Orr

+0

@ orr:我更新了我的答案。 –

0

的readlines方法可以讓你的所有的單詞的列表在該文件中:

text = open("myfile.txt") 
wordlist = text.readlines() 

現在,你只需要對環路做:

for item in wordlist: 
    anagramfunction()... 
+0

這消耗了大量的內存...... –

+1

你可以只爲'在文本行'。 –

+0

好吧,這開始幫助我。但是我怎樣才能擺脫每個單詞結尾的2 \ n? – Orr

0
  1. 負載的所有字(行)轉換成列表,而詞語在單獨的行中這可以通過readlines()完成(你將不得不使用strip()以除去行結束):

    詞語= [ s.strip()對於s的f.readlines()]

  2. 爲每個單詞創建字謎

  3. 使用單詞列表in運營商對於字謎,以檢查是否存在字謎
  4. 如果存在,那麼打印
2
file = 'file.txt' 
with open(file, 'r') as f: 
    for line in f: 
     pass 
0

我假設你的單詞列表也不是那麼巨大,它不適合在RAM中。這裏是一個(非優化)算法,將建立字謎列表(使用以前的答案位):

def buildAnagramsList(word, wordList): 
    anagramsList = [] 
    for word2 in wordList: 
     if areAnagrams(word, word2): #you already have a similar method 
      list.remove(word2) # Spare some time here by not looking twice for the same anagrams 
      anagramsList.append(word2) 
    return anagramsList 

file = open("myfile.txt") 
words = [s.strip() for s in file.readlines()] 
anagramsLists = [buildAnagramsList(word, words) for word in words] 
0

我會去這樣的事情:現在

wordList = [] 
anagrams = [] 

file = StringIO.StringIO(open("file.txt","rb"),dialect=csv.excel) //Using csv.excel as each word is on a different line, so hoping this should work but Im not entirely sure 
wordList.extend(wordList) 

單詞表應是像[Word1,Word2,Word3]

for i in xrange(wordList): 
    if wordList[i] == wordList[i+1]://Code to analyse anagrams here 
     anagrams.append(wordList[i]) 

我真的不知道這個語法,我給你一個我會做什麼的想法。儘管有人可能會將這個答案當作是我的頭頂,但你不得不停止它拋出一個OutOfBounds錯誤,但我沒有太多時間來寫它! :P