2015-04-16 5 views
0

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

Это то, что у меня есть до сих пор.

with open("words.txt") as f: #Open the text file 
    wordlist = [x.rstrip() for x in f] 
variable = random.sample(wordlist,1)  #Assigning the random word 
print(variable) 
+0

ли то, что у вас есть работа? Если нет, что не работает? –

+0

Мне удалось присвоить случайное слово из текстового файла переменной, однако теперь я борюсь за то, как удалить это случайное слово из текстового файла. – sharmacka

ответ

1

Используйте random.choice, чтобы выбрать одно слово:

variable = random.choice(wordlist) 

Вы можете удалить его из списка слов другого понимания:

new_wordlist = [word for word in wordlist if word != variable] 

(Вы можете также использовать filter для этого part)

Вы можете сохранить этот список слов в файл по используя:

with open("words.txt", 'w') as f: # Open file for writing 
    f.write('\n'.join(new_wordlist)) 

Если вы хотите удалить только один экземпляр слова, вы должны выбрать индекс для использования. См. this ответ.

+0

Я подозреваю, что ему также нужно написать 'new_wordlist' обратно в слова. txt', хотя я достигаю пределов своей способности к чтению ума здесь. :) – abarnert

+0

Я добавил информацию, которая ему может понадобиться, но главный ответ отвечает на вопрос в названии. –

+0

Почему не 'word_list.remove (variable)'? – Vincent

0

Вместо random.choice, как предложил Реут, я бы сделал это, потому что он держит дубликаты:

random.shuffle(wordlist) # shuffle the word list 
theword = wordlist.pop() # pop the first element 
+0

Как вы знаете, что каждый раз переадресовывать список? – abarnert

+0

@abarnert Что значит приемлемый? Список всегда можно перетасовать. –

+0

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

1

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

index = random.randrange(len(wordlist)) 
word = wordlist.pop(index) 
with open("words.txt", 'w') as f: 
    f.write('\n'.join(new_wordlist)) 

Или, как вариант, использовать enumerate выбрать оба сразу:

word, index = random.choice(enumerate(wordlist)) 
del wordlist[index] 
with open("words.txt", 'w') as f: 
    f.write('\n'.join(new_wordlist)) 
Смежные вопросы