如何在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的列表,然后从中随机选择谢谢!我两个都试试。:)天啊!我完全理解!谢谢你!我试过了,结果成功了。谢谢!!!:):)太棒了,我很高兴能帮上忙。你介意接受答案吗?天哪!我完全理解!谢谢你!我试过了,结果成功了。谢谢!!!:):)太棒了,我很高兴能帮上忙。你介意接受这个答案吗?