繁体   English   中英

将字典写入.csv

[英]Writing Dictionary to .csv

环顾四周后,我一直无法找到可以开始工作的答案。 我正在为我的第一年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形式。

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"))

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

要么使用csv库 ,要么做一些简单的事情:

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]}

@ÉbeIsaac和@L3viathan描述的泡菜方法是要走的路。 如果您还想对数据执行其他操作,您可能需要考虑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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM