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