Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中从文本文件中随机选择具有特定条件的行_Python_Python 3.x - Fatal编程技术网

如何在Python中从文本文件中随机选择具有特定条件的行

如何在Python中从文本文件中随机选择具有特定条件的行,python,python-3.x,Python,Python 3.x,我能征求你的意见吗?我需要从带有条件的文本文件中选择一行。所以我试着用这个: import random def pick_random_resto(restaurant_obj_list): content = open ('resto_input.txt','r') random_restaurant = content.readlines() print("Restaurant: " + random.choice(random_re

我能征求你的意见吗?我需要从带有条件的文本文件中选择一行。所以我试着用这个:

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:已访问):


因此,我想知道是否可以使用“w”创建一个新的文本文件,在其中复制尚未访问过的餐厅并删除访问过的餐厅。还是有比这更好的方法?抱歉,我是新手。

有几种方法可以实现这一点,这取决于函数如何运行以及在什么上下文中运行。如果你只是想运行一个脚本来读取文件,抓取一家没有去过的餐馆,然后更新文件,我建议如下

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
从文件中读取文本,当读取完成时,它将自动关闭文件,这是从文件中读取的python方式。然后,我们用一个列表来过滤餐馆,该列表在一行中查找“N”(大写字母N加双引号)。然后我们检查是否有未参观的餐厅,如果没有,我们打印一条友好的消息并返回,否则,
random.choice
将抛出错误。如果我们有未参观的餐厅,
random.choice
将选择一家。然后,我们从完整列表中获取餐厅的索引,以便更新条目,最后使用
with open
w
writelines
将其写回文件


另一种使之更容易的方法是将您的餐厅存储在字典中,并将其保存为JSON文件。它是人类可读的,并且用python很容易解析

根据函数将如何运行以及在什么上下文中运行,有几种方法可以实现这一点。如果你只是想运行一个脚本来读取文件,抓取一家没有去过的餐馆,然后更新文件,我建议如下

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
从文件中读取文本,当读取完成时,它将自动关闭文件,这是从文件中读取的python方式。然后,我们用一个列表来过滤餐馆,该列表在一行中查找“N”(大写字母N加双引号)。然后我们检查是否有未参观的餐厅,如果没有,我们打印一条友好的消息并返回,否则,
random.choice
将抛出错误。如果我们有未参观的餐厅,
random.choice
将选择一家。然后,我们从完整列表中获取餐厅的索引,以便更新条目,最后使用
with open
w
writelines
将其写回文件


另一种使之更容易的方法是将您的餐厅存储在字典中,并将其保存为JSON文件。它是人类可读的,并且用python很容易解析

创建一个包含所有行和的列表,每当您随机选择一行时,请将其从列表中删除,这样它就永远不会被访问。您可能可以迭代阅读行并创建另一个不包含Y的列表,然后从中随机选择谢谢!我两个都试试。:)创建一个包含所有行和的列表,每当您随机选择一行时,请将其从列表中删除,这样它就永远不会被访问。您可能可以迭代阅读行并创建另一个不包含Y的列表,然后从中随机选择谢谢!我两个都试试。:)天啊!我完全理解!谢谢你!我试过了,结果成功了。谢谢!!!:):)太棒了,我很高兴能帮上忙。你介意接受答案吗?天哪!我完全理解!谢谢你!我试过了,结果成功了。谢谢!!!:):)太棒了,我很高兴能帮上忙。你介意接受这个答案吗?