将字典写入.csv

时间:2016-11-15 14:54:25

标签: python csv dictionary

环顾四周后,我一直无法找到可以开始工作的答案。我正在为我的第一年CS课程做一个项目的任务经理。除了我每次重新打开数据时都无法保存数据之外,其他所有工作都是我喜欢的(没有GUI,只是文本)。基本上,我想保存我的班级词典:

classes = {period_1:assignment_1, period_2:assignment_2, period_3:assignment_3, period_4:assignment_4, period_5:assignment_5, period_6:assignment_6, period_7:assignment_7}
程序关闭后

我可以保留存储在字典中的数据。但是,我找不到任何可以工作的东西。同样,这是一个初学CS课程,所以我不需要任何花哨的东西,只需要一些基本的东西。为了课堂的目的,我正在使用学校许可的Canopy形式。

3 个答案:

答案 0 :(得分:4)

L3viathan的帖子可能是这个问题的直接答案,但我建议您使用以下内容:使用pickle

import pickle

# To save a dictionary to a pickle file:
pickle.dump(classes, open("assignments.p", "wb"))

# To load from a pickle file:
classes = pickle.load(open("assignments.p", "rb"))

通过这种方法,变量将保留其原始结构,而无需手动编写和转换为不同的格式。

答案 1 :(得分:3)

使用csv library或做一些简单的事情:

with open("assignments.csv", "w") as f:
    for key, value in classes.items():
        f.write(key + "," + value + "\n")

编辑:由于您似乎无法在系统中读取或写入文件,因此这是另一种解决方案(使用pickle和base85):

import pickle, base64

def save(something):
    pklobj = pickle.dumps(something)
    print(base64.b85encode(pklobj).decode('utf-8'))

def load():
    pklobj = base64.b85decode(input("> ").encode('utf-8'))
    return pickle.loads(pklobj)

要保存某些内容,请在对象上调用save,然后将打印的字符串复制到剪贴板,然后将其保存在文件中。

>>> save(classes)  # in my case: {34: ['foo#', 3]}
fCGJT081iWaRDe;1ONa4W^ZpJaRN&NWpge

要加载,请致电load()并输入字符串:

>>> load()
> fCGJT081iWaRDe;1ONa4W^ZpJaRN&NWpge
{34: ['foo#', 3]}

答案 2 :(得分:1)

@ÉbeIsaac和@L3viathan描述的泡菜方法是要走的路。如果您还想对数据执行其他操作,您可能需要考虑pandas(只有在您执行除了导出数据之外的其他操作时才应使用pandas)。

由于根据您的问题下方的评论,您的词典中只有基本字符串,因此使用起来很简单;如果你有更复杂的数据结构,那么你应该使用pickle方法:

import pandas as pd

classes = {'period_1':'assignment_1', 'period_2':'assignment_2', 'period_3':'assignment_3', 'period_4':'assignment_4', 'period_5':'assignment_5', 'period_6':'assignment_6', 'period_7':'assignment_7'}

pd.DataFrame.from_dict(classes, orient='index').sort_index().rename(columns={0: 'assignments'}).to_csv('my_csv.csv')

这会给你以下输出:

           assignments
period_1  assignment_1
period_2  assignment_2
period_3  assignment_3
period_4  assignment_4
period_5  assignment_5
period_6  assignment_6
period_7  assignment_7

详细说明:

.from_dict(classes, orient='index')使用输入

中的字典创建实际数据帧

.sort_index()对未使用字典创建数据框的索引进行排序

.rename(columns={0: 'assignments'})只为您的列指定一个更合理的名称(默认使用“0”)

.to_csv('my_csv.csv')最终将数据帧导出到csv

如果您想再次阅读该文件,可按以下方式进行:

df2 = pd.read_csv('my_csv.csv', index_col=0)