写入文件也附加

时间:2017-10-25 15:24:17

标签: python python-3.x csv

我遇到了一个问题,其中:我的代码创建了一个带有标题的文件,将数据写入其中。然后,当我第二次运行它时,它会覆盖数据,它应该开始一个新的行。此外,分隔符的含义是什么?

#Intro
import csv

headers=["Name","Age","Year Group"]
with open("Details.csv","a" and "w") as i:
      w=csv.writer(i,delimiter=",")
     w.writerow(headers)
     print("Welcome User, to my Topics Quiz!\n------------------------------
      ---------\nYou can choose from 3 different topics:\n  • History\n  • Music\n  • 
     Computer Science\n---------------------------------------")
     #Storing: User's name, age and year group
     print("Before we start, we need to register an account.")
     User=input("Enter your name:\n")
     Age=input("Enter your age:\n")
     Year=input("Enter your year group:\n")

    details=[User,Age,Year]
    w.writerow(details)
with open("UserPass.csv","a" and "w") as Userpass:
    w=csv.writer(Userpass,delimiter=",")
    headers=["Username","Password"]
    w.writerow(headers)
    NewUser=(User[:3]+Age)
    print("Great! Your username is set to: {}".format(NewUser))
    Pass=input("Enter a password for your account:\n")
    userpass=[NewUser,Pass]
    w.writerow(userpass) 

因此代码会在我想要添加时写出数据。

提前致谢。

4 个答案:

答案 0 :(得分:0)

您的模式仅为"w"

>>> "a" and "w" == "w"
True

而是仅使用"a"

答案 1 :(得分:0)

a 对于开放模式已经足够了。

追加:" a" 在其定义中有写:" w" 。当你说你要追加它意味着你想在最后写...所以不要一起使用它们。

分隔符表示分隔符,大多数时候都会引用一些字符,如逗号,空格,点等。

答案 2 :(得分:0)

如果您希望附加到现有的.csv文件,则需要:

  • 如果文件已存在,请跳过编写标题,(在打开之前查看os.path.exists()
  • 以读取模式打开文件&首先将文件读入内存(作为列表列表),关闭它然后将新行添加到数据中,然后 over 写入整个内容,包括标题,超过原来的(这确实可以让你做排序行的事情)

正如其他人所说,你的文件打开模式应该是以下之一:

  • " R" = R ead Text
  • " RB" = R ead B inary
  • " W" = * Over *** W ** rite Text
  • " WB" = *超过*** W rite ** B inary
  • "" = A ppend Text
  • " AB" = A ppend B inary

分隔符指定.csv文件中字段的分隔。

另外,您应该永远存储密码 - 而应该存储密码的哈希值,当用户下次输入密码时,计算相同的哈希值并将其与存储的哈希值进行比较。类似的东西:

import hashlib
import getpass

pswd = getpass.getpass()
userpass = hashlib.sha256(pswd.encode('ascii')).hexdigest()

答案 3 :(得分:0)

对于术语分隔符,请记住CSV代表逗号分隔值。 Delimiter 表示分隔符; CSV使用逗号(",")作为其分隔符或分隔符,但python模块csv为您提供了指定不同分隔符的选项,例如制表符({{1} })等等。

对于文件操作,您可以检查文件是否为空。如果是,请编写标题。然后(总是)追加数据。像这样:

"\t"

希望这有帮助!