将新行写入CSV

时间:2019-10-11 06:53:03

标签: python-3.x

我不是专门的程序员,这是我第一次做这样的事情。

我创建了一个While循环,该循环使用将被写入CSV文件的条目。

我不知道如何重复循环,因此新值将按字母顺序写入新行。

我设法使该程序可以运行,但只有一次只能进入一行。每次您重新启动程序并输入新内容时,它将覆盖CSV中的旧数据行。


import csv 

fields = ['Name', 'Surname', 'Status'] 

rows = [[]]

while True:

    status=input("Enter status number: ")
    if status !="3":
        print("Wrong status number.")
    else:
        surname=input("Enter surname: ")
        name=input("Enter name: ")
        value=surname+"-"+name+"-"+name+"."+surname+"@mail.com"+","+status
        print(value)
        value=name+","+surname+","+name+"."+surname+"@mail.com"+","+status
        for inner_row in rows:
            _name=name
            _surname=surname
            _name_surname=name+"."+surname+"@mail.com"
            rows[0].append(_name)
            rows[0].append(_surname)
            rows[0].append(_name_surname)
            rows[0].append(status)
        break

filename = "university_records.csv"

with open(filename, 'w') as csvfile: 

    csvwriter = csv.writer(csvfile)

    csvwriter.writerow(fields) 

    csvwriter.writerows(rows)

3 个答案:

答案 0 :(得分:0)

要在每次运行程序时不覆盖数据,只需在中使用上下文管理器将 w 更改为 a

with open(filename, "a") as csvfile:

“ w”用于 write ,“ a”用于 append

但是,您每次运行程序时也要编写字段(名称,姓氏等),这可以使用简单的if语句来解决。文件对象(csvfile)具有称为 tell()的方法,该方法返回光标在文件对象中的位置。如果位置为0,则该文件是新文件,然后您打印字段。否则你会跳过


    if csvfile.tell() == 0:
        csvwriter.writerow(fields)

我还认为您缺少该文件作为正确的csv文件的字段。

fields = ['Name', 'Surname', 'email', 'Status']

希望这对您有帮助

答案 1 :(得分:0)

import csv
import os

fields = ['Name', 'Surname', 'Email', 'Status']
filename = "university_records.csv"

rows = []
if os.path.isfile(filename):
    with open(filename) as csv_file:
        csv_reader = csv.reader(csv_file)
        next(csv_reader)  # skip header
        for row in csv_reader:
            rows.append(row)

while True:
    status = input("Enter status number (or 'exit' to exit): ")
    if status == "exit":
        break
    if status != "3":
        print("Wrong status number.")
    else:
        surname = input("Enter surname: ")
        name = input("Enter name: ")
        email = name + "." + surname + "@mail.com"
        rows.append([name, surname, email, status])

with open(filename, 'w') as csv_file:
    csv_writer = csv.writer(csv_file)
    csv_writer.writerow(fields)
    csv_writer.writerows(sorted(rows))

答案 2 :(得分:0)

感谢帮助人员。我已经完成了这项工作,所以我不想复制粘贴您的代码时100%“作弊”。因此,我将两者混为一谈,直到可以解释代码中发生的事情为止。

最诚挚的问候!