【发布时间】:2020-03-12 05:02:17
【问题描述】:
我正在尝试根据用户输入创建数据集。我试图防止其中一个字段重复。我要求用户选择一个与他们的姓名、年龄、gpa 和专业相匹配的字母。我想确保输入的字母是唯一的,但我不确定在直接写入 .csv 文件时如何执行此操作。
这是我目前所拥有的。
import csv
from colorama import Fore, Back, Style
with open('students2.csv', 'w+', newline='') as csvfile:
columnheaders = ['NAME','AGE','GPA','MAJOR']
writer = csv.DictWriter(csvfile, fieldnames=columnheaders)
writer.writeheader()
for i in range(0,10):
askname=input('Please select the letter that matches your name from the following: (A, B, C, D, E, F, G, H, I, J), ')
askage=input('Please enter your Age: ')
askgpa=input('Please enter your GPA: ')
askmajor=input('Please select your major from the following (CS, CET, CIS, CE) ')
writer.writerow({'NAME': askname,'AGE': askage,'GPA': askgpa,'MAJOR': askmajor})
print(Back.BLACK +'My name starts with the letter:', askname ,' and I am ', askage, 'years old. I study ', askmajor, 'and my GPA is: ', askgpa)
print(Style.RESET_ALL)
我知道如何使用列表来做到这一点,
namelist = []
while True:
#Input name
while True:
name = str(input('What is your name? '))
if name.upper() not in ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'):
print("Please use (A, B, C, D, E, F, G, H, I, J).")
continue
if name in namelist:
print("This name has already been used.")
continue
else:
namelist.append(name)
break
但是是否有可能做到这一点而不必通过列表进行然后将其转换为 .csv?
任何帮助将不胜感激。 提前致谢。
【问题讨论】:
-
为什么“不必通过列表进行操作,然后将其转换为 .csv”?这似乎是一个非常合理的解决方案。
-
@Chris 想知道它是否可以在一个进程中完成,而不是两个单独的进程。
-
@JPnova87 你说的进程是什么意思?这听起来像是我们可以花上一辈子争论的词。
-
您要么必须在写入文件时跟踪内存中的输入(两个“进程”),要么读回文件并查看记录的值(两个“进程”,加上一个吨的低效率)。输入→列表→CSV 解决方案至少同样简单且优雅得多。 (请注意,“过程”的含义与您在计算中所说的非常不同。)
-
您能否显示一行 csv 文件的格式,您是否对 pandas 的答案感兴趣,其中包含您的问题以做您正在寻找的事情?我赞成你的问题,我认为这是一个很好的问题,csv 很难直接处理。
标签: python python-3.x csv export-to-csv