如何将字典保存到文件?
我有更改字典值和保存字典到文本文件(格式必须相同)的问题,我只想更改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
当我尝试更改存储在d
的member_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))