如何将字典保存到文件?[重复]

2025-03-05 09:18:00
admin
原创
5
摘要:问题描述:我在更改字典值并将字典保存到文本文件(格式必须相同)时遇到问题,我只想更改member_phone字段。我的文本文件的格式如下:memberID:member_name:member_email:member_phone 我将文本文件拆分为:mdict={} for line in file: ...

问题描述:

我在更改字典值并将字典保存到文本文件(格式必须相同)时遇到问题,我只想更改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.xPython 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:

除非你真的想保留字典,否则我认为最好的解决方案是使用csvPython 模块读取文件。然后,你会得到一行行的数据,你可以随意更改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)
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1325  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。它涵盖了从产品概念产生到产品退市的整个生命周期,通过整合跨部门团队、优化流程等方式,显著提升产品开发的效率和质量,进而为项目的成功奠定坚实基础。深入探究IPD流程的五个阶段与项目成功之间...
IPD流程分为几个阶段   4  
  华为作为全球知名的科技企业,其成功背后的管理体系备受关注。IPD(集成产品开发)流程作为华为核心的产品开发管理模式,其中的创新管理与实践更是蕴含着丰富的经验和深刻的智慧,对众多企业具有重要的借鉴意义。IPD流程的核心架构IPD流程旨在打破部门墙,实现跨部门的高效协作,将产品开发视为一个整体的流程。它涵盖了从市场需求分析...
华为IPD是什么   3  
  IPD(Integrated Product Development)研发管理体系作为一种先进的产品开发模式,在众多企业的发展历程中发挥了至关重要的作用。它不仅仅是一套流程,更是一种理念,一种能够全方位提升企业竞争力,推动企业持续发展的有效工具。深入探究IPD研发管理体系如何助力企业持续发展,对于众多渴望在市场中立足并...
IPD管理流程   3  
  IPD(Integrated Product Development)流程管理旨在通过整合产品开发流程、团队和资源,实现产品的快速、高质量交付。在这一过程中,有效降低成本是企业提升竞争力的关键。通过优化IPD流程管理中的各个环节,可以在不牺牲产品质量和性能的前提下,实现成本的显著降低,为企业创造更大的价值。优化产品规划...
IPD流程分为几个阶段   4  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用