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

Python 如何将用户输入放入CSV文件?,python,csv,Python,Csv,我的问题有很多排列,但最接近的答案是: 不幸的是,每行的打印输出如下: 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("W

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


不幸的是,每行的打印输出如下:

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"
我从用户输入中获取字典,输出文件必须将每个新答案(为什么、日期和故事)放在新行上(此外,列标题只打印一次)。因此,我的代码如下所示:

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"
总之,我需要如下输出:

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”不支持缓冲区接口(我通过向with open(file,“wb”,“utf-8”)语句中添加“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:sequence expected

如果字段在写入时被引用,则控件的
引用
参数。如果将此参数的值设置为,则所有字段都将被引用。

如果字段在写入时被引用,则控件的
quoting
参数。如果将此参数的值设置为,则所有字段都将被引用。

“不幸的是,每行打印的输出都是这样”-如果我理解正确

“不幸的是,每行的打印输出都是如此”-如果我理解正确


如果您只想获取用户输入并将其写入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”作为append,而不是“w”,这将在新行上写入每一组新字符串


这可能是一个这样的例子:在最后将所有集合都写入文件之前,将所有集合存储在某个位置可能是一个好主意,因为始终打开和关闭文件可能会很昂贵(我不知道这是否是您的考虑因素)。如果您仍然不习惯使用词典,您可以简单地将每个[原因、日期、故事]列表添加到一个更大的列表中,然后在最后编写时循环列表。

如果您只需要接受用户输入并将其写入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”作为append,而不是“w”,这将在新行上写入每一组新字符串


这可能是一个这样的例子:在最后将所有集合都写入文件之前,将所有集合存储在某个位置可能是一个好主意,因为始终打开和关闭文件可能会很昂贵(我不知道这是否是您的考虑因素)。如果你仍然不习惯使用字典,你可以简单地将每个[为什么,日期,故事]列表添加到一个更大的列表中,然后在最后写作时循环列表。

谢谢。这似乎把我带到了那里。我只是在write row语句之后添加了一个break语句。剩下的唯一问题是,如果我希望用户能够频繁输入,那么这段代码将删除输出的一行,并每次重写它。我想我可以在while循环中写一个for循环,看看输出文件是否有一个空行。再次感谢你的帮助。我原以为我对字典的理解很好,但我想没有我想象的那么好。+1,但这缺少了一个
w.writerow(['why','date','story']),在
while'循环之前匹配OP的预期输出。谢谢Ian。这似乎把我带到了那里。我只是在write row语句之后添加了一个break语句。剩下的唯一问题是,如果我希望用户能够频繁输入,那么这段代码将删除输出的一行,并每次重写它。我想我可以