Есть несколько способов go сделать это, в зависимости от того, как функция будет работать и в каком контексте. Если вы просто хотите запустить сценарий, который читает файл, захватывает ресторан, который не был посещен, а затем обновляет файл, я бы порекомендовал следующее.
def get_unvisited_restaurant():
with open('resto_input.txt', 'r') as f:
restaurants = f.readlines()
unvisited = [r for r in restaurants if '"N"' in r]
if len(unvisited) == 0:
print('No more new restaurants')
return
random_unvisited = random.choice(unvisited)
print("How about we try", random_unvisited)
idx = restaurants.index(random_unvisited)
restaurants[idx] = random_unvisited.replace('"N"', '"Y"')
with open('resto_input.txt', 'w') as f:
f.writelines(restaurants)
Итак, сначала мы читаем текст из нашего файла, используя with
, который автоматически закроет файл, когда это будет сделано, что является способом pythoni c чтения из файла. Затем мы фильтруем рестораны с пониманием списка, которое ищет в строке «N» (заглавная N с двойными кавычками). Затем мы проверяем, есть ли у нас непосещенные рестораны, если нет, мы печатаем дружественное сообщение и возвращаемся, иначе random.choice
выдаст ошибку. Если у нас есть непосещенные рестораны, random.choice
выберет один. Затем мы берем индекс ресторана из нашего полного списка, чтобы мы могли обновить запись и, наконец, записать его обратно в наш файл, используя with open
, w
и writelines
.
Еще один способ упростить эту задачу - сохранить ваши рестораны в словаре и сохранить его как файл JSON. Он читается человеком, а также легко разбирается в python.