如何将字典保存到文件?

我有更改字典值和保存字典到文本文件(格式必须相同)的问题,我只想更改member_phone字段。

我的文本文件是以下格式:

 memberID:member_name:member_email:member_phone 

我用以下方式分割文本文件:

 mdict={} for line in file: x=line.split(':') a=x[0] b=x[1] c=x[2] d=x[3] e=b+':'+c+':'+d mdict[a]=e 

当我尝试更改存储在dmember_phone ,值已经改变,

 def change(mdict,b,c,d,e): a=input('ID') if a in mdict: d= str(input('phone')) mdict[a]=b+':'+c+':'+d else: print('not') 

以及如何将字典保存到具有相同格式的文本文件?

Python有这样的事情的泡菜模块。

这些function是您保存和加载几乎任何对象所需的全部function:

 def save_obj(obj, name ): with open('obj/'+ name + '.pkl', 'wb') as f: pickle.dump(obj, f, pickle.HIGHEST_PROTOCOL) def load_obj(name ): with open('obj/' + name + '.pkl', 'rb') as f: return pickle.load(f) 

这些函数假定你在当前的工作目录下有一个obj文件夹,它将被用来存储对象。

请注意,pickle.HIGHEST_PROTOCOL是一种二进制格式,不能总是方便,但是对性能有好处。 协议0是文本格式。

为了保存Python的集合,有搁置模块。

泡菜可能是最好的select,但如果有人想知道如何使用NumPy保存和加载字典到文件:

 import numpy as np # Save dictionary = {'hello':'world'} np.save('my_file.npy', dictionary) # Load read_dictionary = np.load('my_file.npy').item() print(read_dictionary['hello']) # displays "world" 

仅供参考: NPY文件查看器

我不确定你的第一个问题是什么,但是如果你想把一个字典保存到一个文件中,你应该使用json库。 查看加载的文档并放置函数。

以下是如何使用Python内置的文本处理function完成的:

 with open('members.txt') as file: mdict={} for line in file: a, b, c, d = line.strip().split(':') mdict[a] = b + ':' + c + ':' + d a = input('ID: ') if a not in mdict: print('ID {} not found'.format(a)) else: b, c, d = mdict[a].split(':') d = input('phone: ') mdict[a] = b + ':' + c + ':' + d # update entry with open('members.txt', 'w') as file: # rewrite file for id, values in mdict.items(): file.write(':'.join([id] + values.split(':')) + '\n') 

除非你真的想保留字典,我认为最好的解决scheme是使用csv Python模块来读取文件。 然后,你得到的数据行,你可以改变member_phone或任何你想要的; 最后,您可以再次使用csv模块以与打开文件相同的格式保存文件。

阅读代码:

 import csv with open("my_input_file.txt", "r") as f: reader = csv.reader(f, delimiter=":") lines = list(reader) 

编写代码:

 with open("my_output_file.txt", "w") as f: writer = csv.writer(f, delimiter=":") writer.writerows(lines) 

当然,你需要调整你的change()函数:

 def change(lines): a = input('ID') for line in lines: if line[0] == a: d=str(input("phone")) line[3]=d break else: print "not" 

我没有计时,但我敢打赌,h5比咸菜快, 压缩的文件大小肯定会更小。

 import deepdish as dd dd.io.save(filename, {'dict1': dict1, 'dict2': dict2}, compression=('blosc', 9))