簡體   English   中英

現有文件未附加新記錄

[英]Existing file not appending new record

我正在嘗試創建一個文件作為標題,然后稍后打開以追加新記錄,但是似乎我做的不正確,有人知道嗎?

這是下面的代碼:

我已經嘗試了幾種方法,但都沒有成功。

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

下面的工作版本。 請注意,我將您的input語句更改為raw_input。 我正在使用Python 2.7。 需要的主要內容:

  1. 在while循環內和AND外退出的選擇
  2. 為現有用戶建立列表以進行現有用戶名檢查
  3. 修復行的格式
  4. 編寫時不拆分行

似乎現在正在工作,並准備進行更多改進。 進行一些構建並進行測試直到工作,然后再進行構建-節省大量時間!

file = 'Quizdata5.txt'
users = {}

def header():
    headers = "USERID    LOGIN-NAME    SURNAME    NAME    AGE    YEAR-GROUP    SEX    USERNAME\n"
    with open(file, 'r') as file1:
        firstLine = file1.readline()
        print firstLine
        if firstLine == headers:
            print 'Headers present'
            return
    with open(file, 'w') as file1:
            file1.write(headers)

def newUser():
    userList = []

    with open(file, 'r') as file1:
        Lines = file1.readlines()
        for line in Lines[1:]:
            lineArray = line.split('    ')
            userList.append(lineArray[0])
        print userList

    global users
    global header
    global createLogin
    global createPassw 
    global surname 
    global name
    global  age
    global  y_group
    global  sex
    global z1

    createLogin = raw_input("Create login name or enter 'exit' to quit: ")
    if createLogin == 'exit':
        return False

    while createLogin in userList: # check if login name exists
        print("\nLogin name already exist, please choose a different name!\n")
        createLogin = raw_input("Create login name or enter 'exit' to quit: ")
        createLogin = createLogin.strip()
        if createLogin == 'exit':
            print('Goodbye for now.')
            return False
    createPassw = raw_input("Create password: ")
    users[createLogin] = createPassw # add login and password
    # return (users[createLogin])
    surname = raw_input("Pls enter your surname: ")
    name = raw_input("Pls enter ur name: ")
    age = raw_input("Pls enter your age: ")
    y_group = int(raw_input("Please enter your year group: "))
    sex = raw_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)
    return True

if __name__ =='__main__':
    header()    
    while newUser() == True:
        with open(file, 'a') as file2:
            row ="{a}    {b}    {c}    {d}    {e}    {f}    {g}    {h}\n".format(
                    a=createLogin, b=createPassw, c=surname, d=name, e=age, f=y_group, g=sex, h=z1)
            file2.write(row)

不僅僅直接重寫代碼,問題就在於

while newUser():

這意味着調用newUser() ,並且當以布爾值評估的newUser()的返回值返回True執行縮進代碼。 那是bool(newUser()) is True

現在的問題是

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

首先b:Python中的所有對象都有與之關聯的“布爾”值TrueFalse 對於許多內置類型,它們的布爾值評估是有意義的。 例如,在布爾上下文中,整數0被視為False ,而任何非零整數都被視為True 在大多數編程語言中都是這種情況,但有一些例外。

類似地,在布爾值上下文中,空列表[]False (這就是為什么我們可以編寫諸如if not my_list: ...來測試列表是否為空)之類的東西,而任何非空列表都被視為True等的原因。

至於:

您的newUser()函數不會顯式返回任何結果,因為您沒有return語句(湯姆的解決方案中添加了一些)。 您想要做的是在添加新用戶時返回True -ish值,在不添加新用戶時返回False -ish值。 但是,由於您什么都不返回,因此,如果您沒有顯式return Python,則函數的默認返回值是一個名為None的值,並且始終為False

因此,最終結果是while語句下的代碼永遠不會運行。

如果您不確定自己的代碼在做什么,請使用pdb調試器逐行瀏覽代碼並確切查看其功能-返回什么函數以及為變量分配什么值pdb會直接您很快就會獲得一些不錯的教程)。 特別是對於Python,沒有理由對您的代碼實際上在做什么一無所知。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM