我正在尝试使用Python将用户输入的所有输入保存在文本文件中。我要确保所有输入的内容都存储在文件中,直到我完全退出程序为止,在这种情况下,直到我按“ enter”(输入)停止列表。我还需要检查输入名称,并查看它是否与先前的任何输入匹配。
我的程序当前存在的问题是,当我退出代码时,文本文件会更新输入的最新名称。我需要程序将所有这些名称保存到列表中,直到程序结束为止,因为我必须确保没有重复。我将不得不警告用户该名称已存在,对此我也需要帮助。我在下面的代码中输入了一个用于创建和写入文本文件的单独函数,但是我也注意到可以在get_people()函数中实现它。我不确定最好的策略是为它创建一个新功能还是不创建它。写入文件肯定有问题。
文本文件应采用以下格式:
Taylor
Selena
Martha
Chris
以下是我的代码:
def get_people():
print("List names or <enter> to exit")
while True:
try:
user_input = input("Name: ")
if len(user_input) > 25:
raise ValueError
elif user_input == '':
return None
else:
input_file = 'listofnames.txt'
with open(input_file, 'a') as file:
file.write(user_input + '\n')
return user_input
except ValueError:
print("ValueError! ")
# def name_in_file(user_input):
# input_file = 'listofnames.txt'
# with open(input_file, 'w') as file:
# file.write(user_input + '\n')
# return user_input
def main():
while True:
try:
user_input = get_people()
# name_in_file(user_input)
if user_input == None:
break
except ValueError:
print("ValueError! ")
main()
答案 0 :(得分:1)
问题在于代码打开文件的方式:
with open(input_file, 'w') as file:
检查手册-https://docs.python.org/3.7/library/functions.html?highlight=open#open由于open()
,代码每"w"
都会覆盖文件。需要打开它以追加"a"
:
with open(input_file, 'a') as file:
如果文件不存在,追加将创建该文件,或者将其追加到任何同名现有文件的末尾。
编辑:要检查您是否已经看到该名称,请将“已经出现”的名称列表传递给get_people()
函数,并将任何新名称也附加到该列表中。
def get_people( already_used ):
print("List names or <enter> to exit")
while True:
try:
user_input = input("Name: ")
lower_name = user_input.strip().lower()
if len(user_input) > 25:
raise ValueError
elif lower_name in already_used:
print("That Name has been used already")
elif user_input == '':
return None
else:
already_used.append( lower_name )
input_file = 'listofnames.txt'
with open(input_file, 'a') as file:
file.write(user_input + '\n')
return user_input
except ValueError:
print("ValueError! ")
def main():
already_used = []
while True:
try:
user_input = get_people( already_used )
# name_in_file(user_input)
if user_input == None:
break
except ValueError:
print("ValueError! ")
main()
答案 1 :(得分:0)
如果我正确理解了您的问题,我会说。 您可以读取文件并将所有行放入列表中,然后可以检查输入是否已经存在。在这里,我对您的代码进行了一些编辑。
call sqlj.remove_jar( jar-id )