以特定方式从文件中读取单词

时间:2015-01-27 21:08:07

标签: python file

所以我试图将一个单词存储到一个文件中(我已经设法弄明白该怎么做)。然后程序会重复并要求我输入另一个单词。它应该检查文件中是否已经存在该单词(它应该存在)。我已经把它输入了一个单词并且它已经存储在文件中但是当我再次输入相同的单词时它没有意识到该单词已经存在于文件中。 (这都是def函数,所以当我说下一次它绕过时我的意思是下次我调用函数时)

以下是代码:

def define():
    testedWord = subject
    lineNumber = 1
    lineInFile = "empty"
    exists = False
    while lineInFile != "":
        wordsFile = open("Words.txt", "a")
        lineInFile = linecache.getline("Words.txt", lineNumber)
        lineNumber = lineNumber + 1
        lineInFile = lineInFile.replace("\n", "")
        if lineInFile == subject:
            definitionNumber = lineNumber
            exists = True
    if exists == False:
        wordsFile.write(testedWord)
        wordsFile.write("\n")
        wordsFile.close()

subject = input("")
define()
##This whole thing basically gets repeated

就像我说的,如果我存储一个新单词然后在同一个程序中尝试再次输入相同的单词,那么它将无法识别它已经存储了这个单词。当我停止程序并重新启动它时,它可以工作(但我不想这样做)

感谢您的帮助(如果有可能帮助大声笑) 丹

1 个答案:

答案 0 :(得分:1)

我认为你(几乎)所做的一切都比它需要的更复杂。以下是您尝试做的不同方式:

def word_check(f_name, word):

    with open(f_name) as fi:
        for line in fi: # let Python deal with line iteration for you
            if line.startswith(word):
                return # return if the word exists

    # word didn't exist, so reopen the file in append mode
    with open(f_name, 'a') as fo:
        fo.write("{}\n".format(word))

    return

def main():

    f_name = "test.txt"

    with open(f_name, 'w') as fo:
        pass # just to create the empty file

    word_list = ['a', 'few', 'words', 'with', 'one',
                 'word', 'repeated', 'few'] # note that 'few' appears twice

    for word in word_list:
        word_check(f_name, word)

if __name__ == "__main__":
    main()

这将生成一个输出文件,其中包含以下文本:

  

一个
  几
  也就是说
  与
  一个
  重复

在这个例子中,我刚刚创建了一个单词列表,而不是使用输入来保持示例简单。但请注意您当前方法的效率如何。您正在重新打开文件,并为输入的每个单词读取每一行。考虑在内存中构建单词列表,并在结尾处写出来。这是一个利用内置set数据类型的实现。他们不允许重复元素。如果您可以在程序运行的 end 处写出文件而不是在运行中,那么您可以这样做:

def main():

    word_set = set()

    while True:
        word = input("Please enter a word: ")

        if word == 'stop': # we're using the word 'stop' to break from the loop
            break          # this of course means that 'stop' should be entered 
                           # as an input word unless you want to exit
        word_set.add(word)

    with open('test.txt', 'w') as of:
        of.writelines("{}\n".format(word) for word in word_set)
        # google "generator expressions" if the previous line doesn't
        # make sense to you

    return

if __name__ == "__main__":
    main()

印刷输出:

  

请输入一个词:apple
  请输入一个词:葡萄
  请输入一个词:cherry
  请输入一个词:葡萄
  请输入一个词:banana
  请输入一个字词:停止

生成此文件:

  

葡萄
  香蕉
  樱桃
  苹果