我如何在Python上打开文本文件中的行(2.72)

问题描述:

我有几千字的文本文件(一行中有一个字)。 我写了一个函数,它带有两个单词(字符串),并检查一个单词是否是另一个单词(即,如果这两个单词包含相同的 字母,即使顺序不同)。我如何在Python上打开文本文件中的行(2.72)

现在我想查阅我的巨大文本文件并搜索anagrams。我的输出应该是一个包含几个字的元组的列表,其中 是anagrams。

问题是,我不知道如何用for/while循环检查单词。我试过的所有东西都失败了。 (我很清楚这样做的方式,但我只是不太了解python)。

编辑#1: 假设我想在文本中的第1到第100行而不是整个文本,我该怎么做?

+0

这功课吗? – ekhumoro

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:我更新了我的答案。 –

的readlines方法可以让你的所有的单词的列表在该文件中:

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

现在,你只需要对环路做:

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

这消耗了大量的内存...... –

+1

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

+0

好吧,这开始帮助我。但是我怎样才能摆脱每个单词结尾的2 \ n? – Orr

  1. 负载的所有字(行)转换成列表,而词语在单独的行中这可以通过readlines()完成(你将不得不使用strip()以除去行结束):

    词语= [ s.strip()对于s的f.readlines()]

  2. 为每个单词创建字谜

  3. 使用单词列表in运营商对于字谜,以检查是否存在字谜
  4. 如果存在,那么打印

file = 'file.txt' 
with open(file, 'r') as f: 
    for line in f: 
     pass 

我假设你的单词列表也不是那么巨大,它不适合在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] 

我会去这样的事情:现在

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