How can I save a dictionary to a file in Python?

How can I save a dictionary to a file in Python?

I am having trouble modifying a dictionary value and saving it to a text file, where the format needs to remain the same. I only want to change the member_phone field.

The format of my text file is as follows:

memberID:member_name:member_email:member_phone

I split the text file with the following code:

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

When I try to change the member_phone stored in d, the value changes but does not correspond properly to the key.

Here is my function to change the dictionary:

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')

How can I save the dictionary back to a text file with the same format using Python?

You can use the json module to serialize your dictionary and save it as a JSON file.

However, this format won’t be exactly the same as your original file, but it will store the dictionary in a structured way.

import json

# Saving dictionary to a file in JSON format
def save_to_json(mdict, filename):
    with open(filename, 'w') as f:
        json.dump(mdict, f, indent=4)

# To load it back
def load_from_json(filename):
    with open(filename, 'r') as f:
        return json.load(f)

If you want to save the dictionary back to a file in the same format as your original text file (i.e., memberID:member_name:member_email:member_phone), you can iterate through the dictionary and write each entry in the desired format.

def save_to_file(mdict, filename):
    with open(filename, 'w') as f:
        for key, value in mdict.items():
            f.write(f"{key}:{value}\n")

# Use this function to save the dictionary in the same format
save_to_file(mdict, 'output.txt')

The pickle module is a great option if you want to store a dictionary in its exact format and reload it later without manually parsing the file. This method saves the entire dictionary as a binary file.

import pickle

# Saving dictionary to a pickle file
def save_to_pickle(mdict, filename):
    with open(filename, 'wb') as f:
        pickle.dump(mdict, f)

# Loading dictionary from pickle file
def load_from_pickle(filename):
    with open(filename, 'rb') as f:
        return pickle.load(f)

# Save the dictionary
save_to_pickle(mdict, 'mdict.pkl')

It allows you to save a dictionary to a file in Python. If you need to maintain the exact format (memberID:member_name:member_email:member_phone), Solution 2 will be the most appropriate.