Как выбрать строку случайным образом с заданным условием c в Python из текстового файла - PullRequest
1 голос
/ 17 июня 2020

могу я попросить совета? Мне нужно выбрать конкретную строку c из текстового файла с условием. Итак, я попытался использовать это:

import random    
def pick_random_resto(restaurant_obj_list):    
    content = open ('resto_input.txt','r')    
    random_restaurant = content.readlines()    
    print("Restaurant: " + random.choice(random_restaurant))   

, который действительно сработал, но условием является случайный выбор из ресторанов, которые еще не были. Вот содержимое текстового файла (N: не посещено, Y: посещено):

"Kanto Freestyle Breakfast", "Y"    
"The Giving Cafe", "N"    
"el Chupacabra", "Y"    
"Ebi 10", "N"    
"Jumong", "Y"

Итак, мне было интересно, могу ли я создать новый текстовый файл, используя 'w', где находятся еще не посещенные рестораны копируется, а посещенные рестораны удаляются. Или есть способ лучше, чем этот? Извините, я новичок ie.

1 Ответ

0 голосов
/ 17 июня 2020

Есть несколько способов 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...