我试图写一个代码,将允许用户输入一个代码,一旦代码已被输入,代码将搜索用户的csv文件,如果用户匹配的csv文件上的现有条目,然后它寻找下一个可用的列中的用户行,并在那里输入数字。如果没有开放的插槽,那么它将覆盖第一个插槽。
正如你在上面看到的,如果用户silverspoon输入一个代码8,那么它应该更新CODE3列,因为它是空的。如果goldspoon输入一个代码17,那么它应该更新CODE1列,因为所有列都有数据。如果bronzespoon输入一个代码99,那么它应该创建一个新的数据行,因为它们不在列表中。它应该看起来像下面这样。
这是一个代码,我目前有,但不幸的是,我让用户输入所有的代码都一遍,它会更新整行每次新的代码输入。
now = datetime.now()
entrydate = now.strftime("%m/%d/%Y")
fields = ["USER", "DATE", "CODE1", "CODE2", "CODE3", "CODE4", "CODE5"]
df = pd.read_csv("C:\test\codes.csv")
if username in df.values: # I use this to determine if the user is already on the CSV file
with open("C:\test\codes.csv", "r") as csvfile, tempfile:
reader = csv.DictReader(csvfile, fieldnames=fields)
writer = csv.DictWriter(tempfile, lineterminator='\n', fieldnames=fields)
for row in reader:
if row["USER"] == username:
new_codes = [entrydate,code1, code2, code3, code4, code5]
row["DATE"], row["CODE1"], row["CODE2"], row["CODE3"], row["CODE4"], row["CODE5"] = new_codes
row = {
"USER": row["USER"],
"DATE": row["DATE"],
"KEYWORD1": row["CODE1"],
"KEYWORD2": row["CODE2"],
"KEYWORD1": row["CODE3"],
"KEYWORD2": row["CODE4"],
"KEYWORD3": row["CODE5"],
}
writer.writerow(row)
shutil.move(tempfile.name, "C:\test\codes.csv")
print(f"{username} updated their code list of {code1} , {code2} , {code3} , {code4} , & {code5} effective {entrydate}")
return
else:
with open("C:\test\codes.csv","a", newline="") as f:
writer = csv.writer(f)
writer.writerow([username,entrydate,code1,code2,code3,code4,code5])
print(f"{username} added {code1} ,{code2} ,{code3} , {code4} , & {code5} to to their code list effective {entrydate}")
return
1条答案
按热度按时间dluptydi1#
你的代码中有一些错误,我根据你想要的规则修改了它(当用户存在且没有空槽时,当没有空槽且用户不存在时)不要忘记用用户输入替换
username
和new_code
。