读取文件并检查文件中是否有数据。python

读取文件并检查文件中是否有数据。python,python,python-3.x,Python,Python 3.x,我正在为一个学校项目做一个掷骰子游戏。当你开始游戏时,你输入你的名字,它需要从文件“Player_Names.txt”中读取以前玩过的玩家的名字列表。如果名字不在列表中,那么他们会得到一个“欢迎”,如果是,他们会得到一个“欢迎回来” 根据我目前的代码,它只读取文件中的第1行,因此如果名称不在第1行,它将返回一条欢迎新玩家的消息。 如果它是名字的一部分,那么如果你先输入“Matthew”,然后再输入“Matt”,它会给你一个“欢迎回来”的信息,但是“Matt”是另一个人,所以它应该是一个“欢迎”信

我正在为一个学校项目做一个掷骰子游戏。当你开始游戏时,你输入你的名字,它需要从文件“Player_Names.txt”中读取以前玩过的玩家的名字列表。如果名字不在列表中,那么他们会得到一个“欢迎”,如果是,他们会得到一个“欢迎回来”

根据我目前的代码,它只读取文件中的第1行,因此如果名称不在第1行,它将返回一条欢迎新玩家的消息。 如果它是名字的一部分,那么如果你先输入“Matthew”,然后再输入“Matt”,它会给你一个“欢迎回来”的信息,但是“Matt”是另一个人,所以它应该是一个“欢迎”信息。 此外,如果您输入的名称在列表中,但在文件的第2行,您什么也没有得到,那么程序将继续执行下一行代码

Names = open("Player_Names.txt", "r+")  
player1 = input("Enter your name: ")  
if player1 in Names.readline():  
    print("Welcome back you are player 1")  
elif player1 not in Names.readline():  
    print("Welcome you are player 1")  
    Names.write(player1)  
    Names.write("\n")  

如何让程序读取所有行并将输入的单词视为完整的单词,而不是像“Matthew”示例中的字母?

您需要读取所有行,使用
readline()
您只读取了一行

Names = open("Player_Names.txt", "r+")  
content = Names.readlines()

content = [x.strip() for x in content] 

if player1 in content:  
    print("Welcome back you are player 1")  
else: 
    print("Welcome you are player 1")  
    Names.write(player1)  
    Names.write("\n")  
这里有几个问题:

if player1 in Names.readline():  
    print("Welcome back you are player 1")  
elif player1 not in Names.readline():  
此构造通常是冗余的,因为第一个条件是第二个条件的否定,因此您可以编写:

if player1 in Names.readline():  
    print("Welcome back you are player 1")  
else:
但是在这种情况下,
Names.readline()
会产生消耗第一行的副作用。所以它们不是等价物

此外,如果您的文件中有几行,则您的算法不起作用

我将创建一个带有行的
列表
,并使用
any

lines = Names.readlines()
if any(player1 in line for line in lines):
   # known player
else:
   # new player
请注意,您可以使用
集合和精确匹配创建更高性能的查找:

lines = {x.strip() for x in Names}
player1 = player1.strip()
if player1 in lines:
   ....
else:

您需要读取整个文件并用换行符将其拆分,这样您将获得行列表,匹配项将与全名进行比较。所以第二行应该是

if player1 in Names.read().split('\n'):  

您不需要
读线
;列表理解可以直接在文件上迭代<代码>内容=[x.strip()代表名称中的x]
。确实如此。我这样做是因为我认为@XTG_YOLO知道他对Python不太熟悉,这会更清楚。我从来没有理由使用
readlines
;强调文件是可直接访问的可能更有益。