[英]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。 需要的主要內容:
似乎現在正在工作,並准備進行更多改進。 進行一些構建並進行測試直到工作,然后再進行構建-節省大量時間!
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中的所有對象都有與之關聯的“布爾”值True
或False
。 對於許多內置類型,它們的布爾值評估是有意義的。 例如,在布爾上下文中,整數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.