如何将字典保存到文件?[重复]
- 2025-03-05 09:18:00
- admin 原创
- 5
问题描述:
我在更改字典值并将字典保存到文本文件(格式必须相同)时遇到问题,我只想更改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
当我尝试更改member_phone
存储在中时d
,值已更改,而不是按键流动,
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')
以及如何将字典保存为具有相同格式的文本文件?
解决方案 1:
Python 有一个pickle模块专门用于处理这种事情。
这些函数就是保存和加载几乎任何对象所需要的全部功能:
import pickle
with open('saved_dictionary.pkl', 'wb') as f:
pickle.dump(dictionary, f)
with open('saved_dictionary.pkl', 'rb') as f:
loaded_dict = pickle.load(f)
为了保存 Python 的集合,有一个shelve模块。
解决方案 2:
Pickle 可能是最好的选择,但如果有人想知道如何使用 NumPy 将字典保存并加载到文件中:
import numpy as np
# Save
dictionary = {'hello':'world'}
np.save('my_file.npy', dictionary)
# Load
read_dictionary = np.load('my_file.npy',allow_pickle='TRUE').item()
print(read_dictionary['hello']) # displays "world"
仅供参考:NPY 文件查看器
解决方案 3:
json
当字典或其他数据可以轻松映射到JSON格式时,我们也可以使用该模块。
import json
# Serialize data into file:
json.dump( data, open( "file_name.json", 'w' ) )
# Read data from file:
data = json.load( open( "file_name.json" ) )
这种解决方案有很多好处,例如,它可以以不变的形式适用于Python 2.x和Python 3.x,此外,以JSON格式保存的数据可以轻松地在许多不同的平台或程序之间传输。这些数据也是人类可读的**。
解决方案 4:
由于 Pickle 存在一些安全问题并且速度较慢(来源),我会选择 JSON,因为它速度快、内置、易于阅读且可互换:
import json
data = {'another_dict': {'a': 0, 'b': 1}, 'a_list': [0, 1, 2, 3]}
# e.g. file = './data.json'
with open(file, 'w') as f:
json.dump(data, f)
阅读同样简单:
with open(file, 'r') as f:
data = json.load(f)
这与这个答案类似,但正确实现了文件处理。
如果性能提升仍然不够,我强烈推荐orjson
基于 Rust 构建的快速、正确的 Python JSON 库。
对于那些注重高效存储而不是运行时性能的人来说,我建议使用压缩,例如bz2:
import json
import bz2
byte_data = json.dumps(data)
compressed_byte_data = bz2.compress(byte_data)
with open(file_path, 'wb') as file_handle:
file_handle.write(compressed_byte_data)
解决方案 5:
保存并将字典加载到文件:
def save_dict_to_file(dic):
f = open('dict.txt','w')
f.write(str(dic))
f.close()
def load_dict_from_file():
f = open('dict.txt','r')
data=f.read()
f.close()
return eval(data)
解决方案 6:
我不确定你的第一个问题是什么,但如果你想将字典保存到文件中,你应该使用json
库。查找 loads 和 puts 函数的文档。
解决方案 7:
我建议使用 JSON 格式而不是 pickle 格式来保存数据,因为 JSON 文件是人类可读的,这使得调试更容易,因为您的数据很小。其他程序也使用 JSON 文件来读取和写入数据。
# To save the dictionary into a file:
json.dump( data, open( "myfile.json", 'w' ) )
这将创建一个名为 myfile 的 json 文件。
# To read data from file:
data = json.load( open( "myfile.json" ) )
这将读取myfile.json
数据并将其存储在数据对象中。
解决方案 8:
对于您正在处理的字符串字典,可以仅使用 Python 的内置文本处理功能来完成。
(请注意,如果值是其他值,则此方法无效。)
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(':')) + '
')
解决方案 9:
我喜欢使用漂亮的打印模块以非常用户友好的可读形式存储字典:
import pprint
def store_dict(fname, dic):
with open(fname, "w") as f:
f.write(pprint.pformat(dic, indent=4, sort_dicts=False))
# note some of the defaults are: indent=1, sort_dicts=True
然后,在恢复时,读取文本文件并将eval()
字符串重新转换为字典:
def load_file(fname):
try:
with open(fname, "r") as f:
dic = eval(f.read())
except:
dic = {}
return dic
解决方案 10:
除非你真的想保留字典,否则我认为最好的解决方案是使用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"
解决方案 11:
我没有计时,但我敢打赌 h5 比 pickle 更快;压缩后的文件大小几乎肯定更小。
import deepdish as dd
dd.io.save(filename, {'dict1': dict1, 'dict2': dict2}, compression=('blosc', 9))
解决方案 12:
file_name = open("data.json", "w")
json.dump(test_response, file_name)
file_name.close()
或者使用上下文管理器,哪个更好:
with open("data.json", "w") as file_name:
json.dump(test_response, file_name)
- 2025年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)