为什么不';难道我写的文件没有用Python保存输入的文本吗?
我正在制作一个聊天机器人,如果UserName.txt文件不存在,用户首先要做的就是输入他们的名字和喜好,但输入的文本不会保存。我做错了什么 我试着删除UserLike函数,看看这是否有什么不同,但它似乎不起作用为什么不';难道我写的文件没有用Python保存输入的文本吗?,python,file-writing,Python,File Writing,我正在制作一个聊天机器人,如果UserName.txt文件不存在,用户首先要做的就是输入他们的名字和喜好,但输入的文本不会保存。我做错了什么 我试着删除UserLike函数,看看这是否有什么不同,但它似乎不起作用 def NameSay(): UserName = input(": ") UserNameFile = open("UserName.txt", "w+") UserNameFile.write(UserName) print("So your na
def NameSay():
UserName = input(": ")
UserNameFile = open("UserName.txt", "w+")
UserNameFile.write(UserName)
print("So your name is "+ UserName + ", right?")
NameConfirm = input(": ")
if 'yes' in NameConfirm or 'Yes' in NameConfirm or 'right' in NameConfirm or 'Right' in NameConfirm or 'ya' in NameConfirm or 'Ya' in NameConfirm or 'yeah' in NameConfirm or 'Yeah' in NameConfirm:
print("Good to meet you, " + UserName + ". I'm Ene, your virtual assistant, friend, coworker, whatever you need me to be!")
print("Now, why don't you tell me a bit about yourself? What you like and all of that.")
UserLike = input(": ")
UserLikesFile = open("UserLikes.txt", "w")
UserLikesFile.write(UserLike)
print("Thank you! This is very interesting info.")
if NameConfirm in ['no', 'No']:
print("Oh? Then tell me what your name is.")
NameSay()
if os.path.isfile('UserName.txt') == True:
f = open("UserName.txt", "r")
file_contents = f.read()
welcomes = ["Welcome back, " + file_contents, "Hey-o! Good to see you again, " + file_contents]
print("\n" + welcomes[random.randint(0,1)])
Main_Menu()
if os.path.isfile('UserName.txt') == False:
print("\nHey-o! I don't think we've met before! What\'s your name?")
NameSay()
文本应该保存到写入的文件中,但文件最终为空。我刚刚运行了此操作,数据确实保存了,所以我不太确定您在讲什么。但是,我可以看到,在使用完这些文件后,您并没有像应该的那样关闭它们。我刚刚运行了这个程序,数据确实保存了下来,所以我不太确定您在说什么。但是,我可以看到,在使用完文件后,您还没有按照应该的方式关闭它们。为了安全起见,您可以在write函数之后立即将输出刷新到文件中
UserNameFile.flush()
另外,不要忘记关闭文件
UserNameFile.close()
为了安全起见,您可以在write函数之后立即将输出刷新到文件中
UserNameFile.flush()
另外,不要忘记关闭文件
UserNameFile.close()
我认为您的代码有两个问题: 1-打开文件时,应关闭或刷新该文件,以便能够读取该文件。我使用
和
语句进行文件管理
2-您正在递归调用NameSay()
,如果一个人输入的用户名有10次错误,您的函数调用堆栈应该保存所有错误。因此,我编辑了不递归调用函数的最后一行代码,并编辑了NameSay
函数以返回True
或False
,以确定它是否成功
def NameSay():
用户名=输入(“:”)
打开(“UserName.txt”、“w+”)作为用户名文件:
UserNameFile.write(用户名)
打印(“所以你的名字是“+UserName+”,对吗?”)
名称确认=输入(“:”)
如果名称确认中的“是”或名称确认中的“是”或名称确认中的“正确”或名称确认中的“正确”或名称确认中的“是”或名称确认中的“是”或名称确认中的“是”:
打印(“很高兴认识你,“+UserName+”。我是Ene,你的虚拟助手、朋友、同事,无论你需要我做什么!”)
打印(“现在,你为什么不告诉我一些关于你自己的事?你喜欢什么以及所有这些。”)
UserLike=input(“:”)
将“UserLikes.txt”、“w”作为UserLikes文件打开:
UserLikesFile.write(UserLike)
打印(“谢谢!这是非常有趣的信息。”)
返回真值
如果名称在['no','no']中确认:
打印(“哦?那告诉我你叫什么名字。”)
返回错误
如果os.path.isfile('UserName.txt')==True:
f=打开(“UserName.txt”、“r”)
文件内容=f.read()
欢迎=[“欢迎回来,”+文件内容,“嗨,好!很高兴再次见到你,”+文件内容]
打印(“\n”+欢迎[random.randint(0,1)])
主菜单()
如果os.path.isfile('UserName.txt')==False:
打印(“\nHey-o!我想我们以前没见过面!你叫什么名字?”)
while(不是NameSay())
持续
我认为您的代码有两个问题:
1-打开文件时,应关闭或刷新该文件,以便能够读取该文件。我使用和
语句进行文件管理
2-您正在递归调用NameSay()
,如果一个人输入的用户名有10次错误,您的函数调用堆栈应该保存所有错误。因此,我编辑了不递归调用函数的最后一行代码,并编辑了NameSay
函数以返回True
或False
,以确定它是否成功
def NameSay():
用户名=输入(“:”)
打开(“UserName.txt”、“w+”)作为用户名文件:
UserNameFile.write(用户名)
打印(“所以你的名字是“+UserName+”,对吗?”)
名称确认=输入(“:”)
如果名称确认中的“是”或名称确认中的“是”或名称确认中的“正确”或名称确认中的“正确”或名称确认中的“是”或名称确认中的“是”或名称确认中的“是”:
打印(“很高兴认识你,“+UserName+”。我是Ene,你的虚拟助手、朋友、同事,无论你需要我做什么!”)
打印(“现在,你为什么不告诉我一些关于你自己的事?你喜欢什么以及所有这些。”)
UserLike=input(“:”)
将“UserLikes.txt”、“w”作为UserLikes文件打开:
UserLikesFile.write(UserLike)
打印(“谢谢!这是非常有趣的信息。”)
返回真值
如果名称在['no','no']中确认:
打印(“哦?那告诉我你叫什么名字。”)
返回错误
如果os.path.isfile('UserName.txt')==True:
f=打开(“UserName.txt”、“r”)
文件内容=f.read()
欢迎=[“欢迎回来,”+文件内容,“嗨,好!很高兴再次见到你,”+文件内容]
打印(“\n”+欢迎[random.randint(0,1)])
主菜单()
如果os.path.isfile('UserName.txt')==False:
打印(“\nHey-o!我想我们以前没见过面!你叫什么名字?”)
while(不是NameSay())
持续
您在哪里关闭文件?如果不这样做会发生什么,这可能有点不可预测。您打开文件,但从不关闭或刷新它,因此它永远不会完成写入。考虑使用上下文管理器<代码>打开(),你关闭文件在哪里?如果你不这样做会发生什么,可能有点不可预测。你>代码>打开< /代码>文件,但是永远不要关闭或刷新它,所以它永远不会完成写。考虑使用上下文管理器<代码>打开。(代替如果他真的关闭了文件,可能不需要刷新。或者只使用上下文:和open()作为f:
如果他真的关闭了文件,可能不需要刷新。或者只使用上下文:和open()作为f: