2015-01-27 2 views
-1

Так что я пытаюсь сохранить одно слово в файле (которому я уже успел выяснить, как это сделать). Затем программа повторит и попросит меня ввести другое слово. Он должен проверить, существует ли это слово в файле (что ему нужно). У меня есть это до такой степени, что я ввел слово, и он сохранил его в файле, но когда я снова вводим одно и то же слово, он не понимает, что слово уже существует в файле. (Это все функции четкости так что, когда я говорю, что в следующий раз, когда он объезжает я имею в виду следующий раз, когда я вызвать функцию)Чтение слова из файла определенным образом

Вот код:

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 

Как я уже сказал, если я сохраните новое слово, а затем в одной и той же программе попытайтесь снова ввести одно и то же слово, но он не узнает, что он уже сохранил это слово. Когда я остановить программу и перезапустить его, он работает (но я не хочу, чтобы сделать это)

Спасибо вам помочь (если это возможно, чтобы помочь лол) Dan

ответ

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. Они не позволяют повторять элементы. Если все в порядке с выписыванием файл на конце программы запуска, а не на лету, вы можете сделать это вместо того, чтобы:

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() 

Печатный вывод:

Пожалуйста введите слово: яблоко
Пожалуйста, введите слово: виноград
Пожалуйста, введите слово: вишня
Пожалуйста, введите слово: виноградный
Пожалуйста, введите слово: банановый
Пожалуйста, введите слово: остановка

Производит этот файл:

виноградный
банан
вишня
яблоко

+0

Спасибо тааак много для вашей помощи.Это действительно помогло мне в моей программе. Я не понимал, насколько это было бы легко. – user3320350

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