如何写入CSV而不是覆盖过去的文本

use*_*500 8 python python-3.x

下面的代码是我到目前为止的代码.当它写入.csv时,它会覆盖我之前在文件中写入的内容.如何以不擦除我之前文本的方式写入文件.(我的代码的目标是拥有一个人输入他们的名字并让程序记住它们)

def main(src):
    try:
        input_file = open(src, "r")
    except IOError as error:
        print("Error: Cannot open '" + src + "' for processing.")
    print("Welcome to Learner!")
    print("What is your name? ")
    name = input()
    for line in input_file:
        w = line.split(",")
        for x in w:    
            if x.lower() == name.lower():
                print("I remember you "+ name.upper())
            else:
                print("NO")
                a = open("learner.csv", "w")
                a.write(name)
                a.close()
                break
if __name__ == "__main__":
    main("learner.csv")
Run Code Online (Sandbox Code Playgroud)

Kar*_*tik 10

您需要在下次附加到文件.这可以通过以附加模式打开文件来完成.

def addToFile(file, what):
    f = open(file, 'a').write(what) 
Run Code Online (Sandbox Code Playgroud)


eva*_*nal 10

改变open("learner.csv", "w")open("learner.csv", "a")

open的第二个参数是mode,w是write,a是append.使用追加它会自动寻找到文件的末尾.


小智 6

您需要以append-mode('a')打开文件,而不是写模式('w'); 在Python文档解释了不同模式下可用.

此外,您可能需要考虑使用with关键字:

在处理文件对象时,最好使用with关键字.这样做的好处是文件在套件完成后正确关闭,即使在途中引发了异常.

>>> with open('/tmp/workfile', 'a') as f:
...     f.write(your_input)
Run Code Online (Sandbox Code Playgroud)