将用户输入逐行附加到 CSV 文件

Appending user input row by row to CSV file

这两天一直在搞这个,一头雾水,希望有人能帮忙。

我为变量分配了 3 个值,这些值始终相同。然后我将第四个值分配给一个变量,每次用户输入时该变量都会不同。目的是为所有 4 个值获取用户输入。例如,在第四个值上,我希望程序重复要求我输入,直到我按下“q”。每次我输入一个值时,它都会附加到一个 CSV 文件中,其中已经输入了现有的 3 个值。 q后继续脚本

value1 = input("enter value1 ")
value2 = input("enter value2 ")
value3 = input("enter value3 ")
value4 = input("enter value4 ")
value4 = input("enter value4 ")
...
...
...
q

CSV 文件 应该是这样的,确保前三个值保持不变,但每个条目的第四个值不同。

column1,column2,column3,column4
value1,value2,value3,something_new
value1,value2,value3,something_new2
value1,value2,value3,something_new3
value1,value2,value3,something_new4
value1,value2,value3,something_new5
value1,value2,value3,something_new6
...
...
...

我有以下代码,每次获取值并在 CSV 文件中添加 1 行。我试过使用文件模式 'a' 但我似乎无法在 CSV 中为下一个添加新行。当我在下面的代码中添加一个 for 循环时,我得到了“TypeError: 'DictWriter' object is not iterable”错误。

with open('file_append.csv', 'w', newline='') as file:
    fieldnames = ['column1', 'column2', 'column3', 'column4']
    writer = csv.DictWriter(file, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerow({'column1': value1, 'column2': value2, 'column3': value3, 'column4': value4})

我迷失了添加 for/while 循环,if 语句,如果有人不能指出我正确的方向或给我一个可行的解决方案,我将不胜感激

我看过很多堆栈溢出和博客,但没有任何东西可以帮助我解决这个问题。

how to append to a new row when writing to CSV file

How to append new data onto a new line

Appending data to csv file

import csv
value1 = input("enter value1 ")
value2 = input("enter value2 ")
value3 = input("enter value3 ")
value4 = '0'

data = []

while True:
    value4 = input("enter value4 ")
    if value4.upper() == "Q":
        break
    data.append([value1,value2,value3,value4])
    

with open('file_append.csv', 'w', newline='') as file:
    writer = csv.writer(file, delimiter=',')
    fieldnames = ['column1', 'column2', 'column3', 'column4']
    writer.writerow(['column1', 'column2', 'column3', 'column4'])
    for row in data:
        writer.writerow(row)

import pandas as pd
pd.read_csv('file_append.csv')

你可以尝试这样的事情。此代码段使用所谓的“海象运算符”(:=),它仅在 Python 3.8 中可用。它还使用自 Python 3.6 以来可用的 f 字符串。这些功能都不是严格要求的,如果有必要,在没有这些功能的情况下重写代码是微不足道的。 itertools 导入也不是必需的,它只是一种从 1 开始向上计数的可爱方式。当然,如果您愿意,可以使用 DictWriter

def main():

    import csv
    import itertools

    fieldnames = ["fruit", "beverage", "desert", "name"]

    with open("output.csv", "w", newline="") as file:

        constant_values = [input(f"What {fieldname} does the diet consist of?: ") for fieldname in fieldnames[:-1]]
        
        writer = csv.writer(file)
        writer.writerow(fieldnames)
        
        count = itertools.count(1)
        while (name := input(f"What is the name of person# {next(count)}?: ")) != "q":
            writer.writerow(constant_values + [name])
        print("Done!")

    return 0


if __name__ == "__main__":
    import sys
    sys.exit(main())

输出:

What fruit does the diet consist of?: Apple
What beverage does the diet consist of?: Coke
What desert does the diet consist of?: Ice Cream
What is the name of person# 1?: John
What is the name of person# 2?: Jerry
What is the name of person# 3?: George
What is the name of person# 4?: Harry
What is the name of person# 5?: Sam
What is the name of person# 6?: q
Done!
>>> 

CSV 文件:

fruit,beverage,desert,name
Apple,Coke,Ice Cream,John
Apple,Coke,Ice Cream,Jerry
Apple,Coke,Ice Cream,George
Apple,Coke,Ice Cream,Harry
Apple,Coke,Ice Cream,Sam