现有文件不附加新记录

时间:2017-10-26 22:38:07

标签: python file append

我正在尝试创建一个文件作为标题,然后稍后打开它以附加新记录,但似乎我没有正确地做某事,有没有人有想法?

这是下面的代码:

我已经尝试过几种方式但无济于事。

file = 'Quizdata5.txt'
users = {}

def header():
    headers = ("USERID      LOGIN-NAME      SURNAME        NAME       AGE  "
               "       YEAR-GROUP     SEX    USERNAME\n")
    with open(file, 'w') as file1:
        file1 .write(headers)
        file1.close()

def newUser():
    global users
    global header
    global createLogin
    global createPassw
    global surname
    global name
    global  age
    global  y_group
    global  sex
    global z1

    createLogin = input("Create login name: ")
    if createLogin in users: # check if login name exists
        print("\nLogin name already exist, please choose a different name!\n")
    else:
        createPassw = input("Create password: ")
        users[createLogin] = createPassw # add login and password
    #return (users[createLogin])
    surname = input("Pls enter your surname: ")
    name = input("Pls enter ur name: ")
    age = input("Pls enter your age: ")
    y_group = int(input("Please enter your year group: "))
    sex =input("Please enter your sex: ")
    print("\nUser created!\n")
    print("*********************************")
    print(" Your Name is\t" + name, "and it starts with: " + name[0] + "\n")
    z1 = createPassw[:3] + age
    print(" Your Username is:\t ", z1)

if __name__ =='__main__':
    header()
    while newUser():
        with open(file, 'a') as file2:
            rows = ("{:8}    {:8}        {:8}        {:8}       {:8}    {:8}"
                    "     {:8}      {:8} \n".format(createLogin, createPassw,
                                                    surname, name, age,
                                                    y_group, sex, z1))
             file2.write(rows.split())
        file2.close()
        #enter code here

2 个答案:

答案 0 :(得分:0)

下面的工作版本。请注意,我将CredUIPromptForWindowsCredentials语句更改为raw_input。我正在使用Python 2.7。需要的主要内容:

  1. 选择退出外部和内部循环
  2. 为现有用户检查构建现有用户的列表
  3. 修改行格式
  4. 编写时不分割行
  5. 似乎现在正在工作并准备好进行更多改进。建立一点,测试直到工作,然后建立更多 - 节省大量的时间!

    input

答案 1 :(得分:0)

如果不直接重写代码,那么问题就在于

while newUser():

这意味着调用newUser(),如果newUser()的返回值(以布尔值计算)返回True,则执行缩进代码 。那是bool(newUser()) is True

现在问题是

a)newUser()返回什么, b)bool()是什么意思?

首先b:Python中的所有对象都有一些" boolean"与之关联的值TrueFalse。对于许多内置类型,他们的布尔值评估是有意义的。例如,整数0在布尔上下文中被视为False,而任何非零整数都被视为True。大多数编程语言都是这种情况,但有一些例外。

同样,空列表[]在布尔上下文中是False(这就是为什么我们可以写if not my_list: ...之类的东西来测试列表是否为空)而任何非空列表被视为True,依此类推。

至于:

您的newUser()功能并未明确返回和任何结果,因为您没有return声明(Tom的解决方案)补充一些)。您要做的是在添加新用户时返回True - ish值,在没有新用户添加时返回False - ish值。但是,由于你没有返回任何东西,事实上,如果你没有明确return,Python的函数的默认返回值是一个名为None的值,它始终是False

因此,最终结果是while语句下的代码永远不会运行。

如果您对代码的作用有任何疑问,请逐行查看并确切了解它正在做什么 - 返回哪些函数以及将哪些值赋给变量 - 使用pdb调试器(Google将指导您快速学习一些好的教程)。特别是Python,没有理由对你的代码实际做的事情一无所知。