如何将用户输入放入CSV文件?

时间:2012-09-28 23:53:51

标签: python csv

我的问题有一堆排列,但最接近的答案是:

How do I write a Python dictionary to a csv file?

遗憾的是,每行打印输出如下:

matthew, green
rachel, blue
raymond, red

其中somedict = dict(raymond =“red”,rachel =“blue”,matthew =“green”)

我的问题要求输出更像这样:

why, date, story
"because", "sunday", "blah blah blah"

我从用户输入中获取字典,输出文件将新答案(原因,日期和故事)放在新行上(此外,列标题只打印一次)非常重要。所以我的代码看起来像这样:

import csv
o = "file.csv"
why = input("Why? ")
date = input("Date: ")
story = input("Story: ") 

总而言之,我需要看起来像这样的输出:

why, date, story
"because", "sunday", "blah blah blah"
"i don't know", "monday", "blah blah blue"
"third base", "monday", "blah blah blarg"

我只是在寻找一种简单的方法来获取用户输入,将其写入csv文件中的新行。我现在已经在这里待了大约两个小时,所以这就是我在这里的原因。首先我得到两个TypeError错误:(1)'str'不支持缓冲区接口(我通过将“utf-8”参数添加到with open(file,“wb”,“utf-8”)语句来解决这个问题)。 (2)TypeError:需要一个整数。出于某种原因,我从“wb”中取出了“b”,它似乎摆脱了这个错误。我发布的链接让我几乎到了我需要的地方,但还不够,我真诚地感谢任何人都能提供的快速澄清。

修改

要清楚,我尝试了几种可能性。最有希望的是:

with open("file.csv", "w", encoding = "utf-8") as f:
    w = csv.writer(f)
    w.writerows(somedict.items())

产生了我上面引用的第一个输出,这不是我需要的。

我也尝试过:

with open("file.csv", "w", encoding = "utf-8") as f:
    w = csv.writer(f)
    w.writerow(somedict.keys())
    w.writerow(somedict.values())

但这给了我:_csv.Error:序列预期

3 个答案:

答案 0 :(得分:5)

如果您只想获取用户输入并将其写入csv文件中的新行,则可以在没有字典的情况下执行此操作。在字典中执行它实际上取决于字典的设置方式 - 如果您对此进行了更多解释,它可能会有所帮助吗?如果这是我想象的方式,kalgasnik的回答是好的。

但是,如果没有必要使用字典(我的问题总体印象),这种方式非常简单:

import csv
with open('file.csv', 'w') as f:
    w = csv.writer(f, quoting=csv.QUOTE_ALL) 

    while (1):
        why = input("why? ")
        date = input("date: ")
        story = input("story: ")
        w.writerow([why, date, story])

直接从用户输入生成您想要的输出。

修改

这种方式适用于您只是一遍又一遍地接收数据的情况,因此while(1)(永远循环)。如果你想一次接收一个集合,完全删除while循环 - 这与在末尾添加一个中断具有相同的效果。

如果你想在每次写入之间打开和关闭文件(例如,如果你将在其间做很多其他的工作),那么在打开文件时使用'a'代替'w',将在新行上写下每组新字符串。

这可能是一个例子,当最终将所有集合存储到最后将它们全部写入文件时,可能是一个好主意,因为始终打​​开和关闭文件可能很昂贵(我不是知道这是否是你的考虑因素)。如果你仍然不熟悉字典,你可以简单地将每个[为什么,日期,故事]列表添加到一个更大的列表中,然后在最后写作时在结尾处循环。

答案 1 :(得分:1)

“遗憾的是,每行打印输出都是这样” - 如果我理解正确,it's your solution

i1 = {"why": "because", "date": "sunday", "story": "blah blah blah"}
i2 = {"why": "i don't know", "date": "monday", "story": "blah blah blue"}
i3 = {"why": "third base", "date": "monday", "story": "blah blah blarg"}

keys = ("why", "date", "story")
with open('mycsvfile.csv','wb') as f:
    w = csv.DictWriter(f, keys)
    w.writeheader()
    for answer in (i1,i2,i3):
        w.writerow(answer)

答案 2 :(得分:0)

csv.writerquoting参数控制是否在编写时引用字段。如果您将此参数的值设置为csv.QUOTE_ALL,则会引用所有字段。