将用户输入逐行附加到 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
这两天一直在搞这个,一头雾水,希望有人能帮忙。
我为变量分配了 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