如何使用用户输入重命名文本文件

时间:2016-11-22 19:03:57

标签: python

我正在尝试在python中编写我自己的食物选择器,人们可以选择是否需要在包装中添加玉米饼,并且程序将计算出成本。

我想要做的一件事是,如果客户不想立即结账,他们可以将订单保存到文本文件中。这一切都完美无缺,但如何将此文本文件重命名为user_name,以便只显示他们的选择,因此我知道谁做出了这些选择?

    if order_save =="1":

        f = open ("user_name.txt","w")
    f.close()       
    if Tortilla_option == "yes":
        f = open ("user_name.txt","a")
        f.write("Tortilla")
        f.close()

    if Chicken_option == "yes":
        f = open ("user_name.txt","a")
        f.write("\nChicken")
        f.close()

    if Salad_option == "yes":
        f = open ("user_name.txt","a")
        f.write("\nSalad")
        f.close()

    if Chilli_option == "yes":
        f = open ("user_name.txt","a")
        f.write("\nChilli Sauce") 
        f.close()

print ("Here is your takeway that will be saved",user_name,"!\n")
f = open ("user_name.txt","r")
print(f.read())
f.close()

2 个答案:

答案 0 :(得分:1)

关于此代码的一些事情。第一:

f = open ("user_name.txt","a")
f.write("\nChilli Sauce") 
f.close()

可以写成

with open(user_name+'.txt', 'a') as f:
    f.write('\nChilli Saurce')

自动管理文件的关闭。它被称为context manager

此外,它将订单保存到文件中,其名称取决于用户是谁。请注意,user_name是变量,而不是字符串。

然而,更好的策略是定义一个函数:

def write_order(user, item, option_yes_or_no):
    if option_yes_or_no=='yes':
        with open(user+'.txt', 'a') as f:
            f.write(item)

然后用以下内容替换整个内容:

for my_option in [tortilla_option, chicken_option, salad_option]:
    write_order(user_name, item, my_option)

避免重复大量代码。

答案 1 :(得分:0)

定义文件名并打开代码顶部的文件:

filename = '%s.txt' % user_name
f = open (filename, "w")

如果您不关心保存文件名以供日后使用,您甚至可以将这些文件组合成一行:

f = open ('%s.txt' % user_name, "w")

然后执行所有文件写入操作,并在完成后关闭文件。

多次打开,写入和关闭文件是浪费且容易出错的。