我的问题有一堆排列,但最接近的答案是:
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:序列预期
答案 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.writer的quoting
参数控制是否在编写时引用字段。如果您将此参数的值设置为csv.QUOTE_ALL,则会引用所有字段。